如何在将新数据填充到表中之前删除JTable中的行?

时间:2012-05-14 11:14:19

标签: java swing jtable

我正在将数据库中的数据填充到我的JTable中。添加新数据并按“刷新”按钮后,我想在检索新数据之前删除表中显示的现有行。如何删除现有行?

这是包含数据[a,1]的原始表。

Original

这是我添加新数据[b,1]并按下刷新按钮后的表格。原始数据[a,1]仍显示在表格中:

After insert

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 个答案:

答案 0 :(得分:2)

我认为我看到了这个问题,

1)搜索ResultsetTableModel / TableFromDatabase(更好)

  • (如果在应用程序生命周期中没有关闭数据库连接(如此困难和懒惰的操作)

a)替换JTable内容

b)与嵌入在Intranet中的数据库的嵌入式Db一起工作

  • DIS

所有进程都在EDT中,然后GUI等待SQL语句

对于将Xxx.close移动到finally块

所需的大多数代码示例

2)您必须使用SwingWorker最复杂的解决方法,更好,最简单的方法是从Runnable#Thread加载数据

3)你可以remove row(s) from TableModel

答案 1 :(得分:1)

您可以删除该行(请参阅DefaultTableModel.removeRow) 或者将新数据放入新的表模型中,并用JTable.setModel()

替换表的表模型

答案 2 :(得分:1)

刷新按钮后,请拨打以下电话:

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

在这种情况下,您需要设法获取数据,列和行计数.Data是您的实际数据,col是列数。

答案 3 :(得分:-2)

enter image description here

这个方法我曾经在任何jTbale中填充数据

明确jtable(刷新)jtable befor populte new data

此行清除jatble befor填充数据

mytable.setModel(new DefaultTableModel(null,colname));

public static void FilltableV(JTable mytable,String sql){     连接con = null;

    Statement Cmd = null;
    ResultSet rs = null;
try {


    con = DriverManager.getConnection("jdbc:mysql://localhost/alserg", "root", "");

    sql="SELECT * FROM products";
    Cmd=con.createStatement();
    rs=Cmd.executeQuery(sql);
    ResultSetMetaData rsmt=rs.getMetaData();
    int colno =rsmt.getColumnCount();
    Vector colname =new Vector();
    DefaultTableModel mytab =new  DefaultTableModel();
    Vector rows =new Vector();
    for(int i=1 ;i< colno;++i){
        colname.addElement(rsmt.getColumnName(i));
        mytab.setColumnIdentifiers(colname);

    }

    while (rs.next()){
        rows= new Vector();
        for (int j=1;j<colno;++j){
            rows.addElement(rs.getString(j));


        }
        mytab.addRow(rows);
        mytable.setModel(new DefaultTableModel(null, colname));
        mytable.setModel(mytab);



    }
} catch (SQLException ex) {
    Logger.getLogger(products.class.getName()).log(Level.SEVERE, null, ex);
}
finally {
    try {
        rs.close();
        Cmd.close();
        con.close();
    } catch (SQLException ex) {
        Logger.getLogger(AlseragLang.class.getName()).log(Level.SEVERE, null, ex);
    }


}

}