0

JTableに行を追加したいのですが、うまくいきませんでした。誰かが私を助けてもらえますか?テーブルは正常に表示されていますが、動的ではありません

//displays all data in Jtable
void refresh()
{
    Vector<Vector<String>> data = new Vector<>();

        ResultSet rs = st.executeQuery("SELECT * FROM tblInfo");

        while(rs.next())
        {           
        Vector<String> d = new Vector<>();
        d.add(rs.getString("ID"));  
        d.add(rs.getString("Name"));
        d.add(rs.getString("User"));
        d.add(rs.getString("Pass"));
        data.add(d);
        }


        Vector<String> header = new Vector<>();
        header.add("ID");
        header.add("Name");
        header.add("Username");
        header.add("Password");

        model = new DefaultTableModel(data, header);
        table = new JTable(model);
        st.close();
        rs.close();

        table.setBackground(Color.LIGHT_GRAY);
        table.setForeground(Color.white);
        scroll = new JScrollPane(table);
        getContentPane().add(scroll);

    st.close();
    rs.close();
}

//adding data to database
void addDoctor()
    {


        st.executeUpdate("INSERT INTO tblInfo(Name) VALUES ('Name')");  

    st.close();
}




public void actionPerformed(ActionEvent e){ 
    Object source = e.getSource();


    else if(btnAdd == source)
    {

        addDoctor();
        refresh();      
    }

ご回答ありがとうございます。:)投稿する前にこのコードを編集しました。

4

2 に答える 2

1

1) 内部にオブジェクトを作成しないでくださいtry - catch - finally block。Swing GUI の場合は、これらのオブジェクトを事前に準備してください。ローカル変数として使用することをお勧めします。

2) 新しい

model = new DefaultTableModel(data, header);
table = new JTable(model);

これらのオブジェクトは、すでに表示されている GUI に追加されることはありません。Swing GUI はどういうわけか気にしません。コンテナーは、下にあるモデルと JTable を変更 (リセット、再初期化) したことを知りません。変更を Swing GUI に通知する必要がありますが、これは適切な方法ではありません。

3) 実行時にこのオブジェクトを再作成しないでください。既存のオブジェクトを再利用し、JTable と DefaultTableModel を 1 回だけ作成します。

DefaultTableModel4)を使用してリセットしmodel.setRowCount(0);、JDBC から新しい行を追加します。

ResultSetTableModel5) 車輪を再発明するのではなく、またはを検索しTableFromDatabaseます。

6) コード行st.close();& rs.close();を に移動しますfinally block

于 2013-03-01T09:42:02.597 に答える
0

DefaultTableModel.setDataVector()を使用して、新しい Data を持つ新しい Vector を既存の TableModel/JTable に追加します。または、insertRow/removeRow メソッドを使用します。または、独自の AbstractTableModel を実装します。

于 2013-03-01T10:20:27.080 に答える