1

データベースからJTableにデータを入力しています。新しいデータを追加して[更新]ボタンを押した後、新しいデータを取得する前に、テーブルに表示されている既存の行を削除したいと思います。既存の行を削除するにはどうすればよいですか?

これがデータ[a、1]を含む元のテーブルです。

オリジナル

これは、新しいデータ[b、1]を追加し、更新ボタンを押した後の表です。元のデータ[a、1]は引き続き表に表示されます。

挿入後

JButton refreshButton = new JButton("Refresh");
refreshButton.setBounds(188, 248, 101, 23);
panel.add(refreshButton);

refreshButton.addActionListener(new ActionListener() 
{                        
    public void actionPerformed(ActionEvent ae)
    {

    DefaultTableModel model = new DefaultTableModel(data,columnNames);
    int rowCount = model.getRowCount(); 

    for (int x = 0; x <=rowCount; x++)
    {
        model.removeRow(x);
    }


        try
        {                       
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/watchlist","root","root");

            String sql = "SELECT * FROM watchlist";
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(sql);
            ResultSetMetaData md = rs.getMetaData();    


            int columns = md.getColumnCount();  

            while (rs.next())
            {   
                Vector row = new Vector(columns);

                for (int i=1; i <= columns; i++)
                {
                    row.addElement( rs.getObject(i) );              
                    System.out.println( rs.getObject(i).toString());        
                }                           

                data.addElement(row);   

                table.revalidate(); 
                table.repaint();
                panel.repaint();

            } // end while  

        } // end try

        catch (Exception e){
        }
    }

});
4

4 に答える 4

2

この質問を見たと思いますが、

ResultsetTableModel / TableFromDatabase1) (より良い)を検索する

  • (アプリケーションのライフサイクル中にデータベース接続(非常に困難で怠惰なアクション)が閉じられない場合)

JTablea)中身を入れ替える

b) イントラネットに配置されたデータベースの埋め込み DB ですぐに動作する

  • ディス

すべてのプロセスが EDT 中にあり、その後 GUI が SQL ステートメントを待機しています

Xxx.closefinally ブロックに移動する必要があるほとんどのコード例

2) 使用しなければならない最も複雑な回避策。SwingWorkerより適切で最も簡単な方法は、からデータをロードすることです。Runnable#Thread

3) TableModel から行を削除できます。

于 2012-05-14T11:25:20.593 に答える
1

行を削除するか (DefaultTableModel.removeRow を参照)、新しいデータを新しいテーブル モデルに入れ、テーブルのテーブル モデルを JTable.setModel() に置き換えることができます。

于 2012-05-14T11:22:31.470 に答える
1

ボタンを更新したら、次を呼び出します。

DefaultTableModel model = new DefaultTableModel(data,col);
model.removeRow(1); // first row in this case

この場合、データ、列、および行数を取得するために管理する必要があります。データは実際のデータであり、col は列の数です。

于 2012-05-14T11:23:43.310 に答える