【问题标题】:JTable does not remove rowJTable 不删除行
【发布时间】:2013-06-27 06:04:01
【问题描述】:

我需要从JTable 中删除行。我写的代码是这样的:

DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel();
int x = 0;
int row = dtm.getRowCount();

while(row>=x){

    dtm.removeRow(x);
    x++;

}

但它会产生错误,例如:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 
  24 >= 24

【问题讨论】:

  • 你遇到了一个错误,因为你应该使用>而不是>=

标签: java arrays swing jtable indexoutofboundsexception


【解决方案1】:

你可以试试这个:

while(row>x){
    dtm.removeRow(x);
    x++;
}

更新

    DefaultTableModel model = new DefaultTableModel(); 
    JTable table = new JTable(model); 

    model.addColumn("Col1"); 
    model.addColumn("Col2"); 
    model.addRow(new Object[]{"1", "2"});
    model.addRow(new Object[]{"1", "2"});

    table.setModel(model);

    for(int index = 0; index<table.getRowCount();)
    {
        model.removeRow(index);
    }

安装 Java 后会更容易。抱歉回答错误。

【讨论】:

  • -1 同样的问题:在删除总行数的一半后,访问下一个 x 将抛出,因为现在它比 current rowCount 更大
【解决方案2】:

一个更简单的解决方案是使用:

dtm.setRowCount(0);

这也更有效,因为表只需要在所有行都被删除后重新绘制一次。

【讨论】:

  • 我相信你需要使用 revalidate() 或 repaint() 来解决这个问题
  • @Marco 不需要。模型触发JTable 接收的必要事件
  • 没有。 Swing 的工作方式是更新模型,模型通知视图重新绘制自己。
猜你喜欢
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 1970-01-01
相关资源
最近更新 更多