如何从JTable中删除一行?

我想从JTable中删除一些行。 我该怎么做?

要从JTable中删除行,您需要从基础TableModel中删除目标行。 例如,如果您的TableModel是DefaultTableModel的实例,则可以通过执行以下操作来删除行:

((DefaultTableModel)myJTable.getModel()).removeRow(rowToRemove); 

如果您需要一个简单的工作解决方案,请尝试使用DefaultTableModel 。

如果您已经创建了自己的表模型,它扩展了AbstractTableModel,那么您还应该实现removeRow()方法。 确切的实现取决于您用于存储数据的底层结构。

例如,如果您使用了Vector,那么它可能是这样的:

 public class SimpleTableModel extends AbstractTableModel { private Vector columnNames = new Vector(); // Each value in the vector is a row; String[] - row data; private Vector data = new Vector(); ... public String getValueAt(int row, int col) { return data.get(row)[col]; } ... public void removeRow(int row) { data.removeElementAt(row); } } 

如果您使用过List,那么它将非常相似:

 // Each item in the list is a row; String[] - row data; List arr = new ArrayList(); public void removeRow(int row) { data.remove(row); } 

HashMap的:

 //Integer - row number; String[] - row data; HashMap data = new HashMap(); public void removeRow(Integer row) { data.remove(row); } 

如果你使用像这样的数组

 String[][] data = { { "a", "b" }, { "c", "d" } }; 

然后你运气不好,因为没有办法从数组中动态删除元素。 您可以尝试通过单独存储一些标志来通知哪些行被删除,哪些不是,或者通过其他一些狡猾的方式,但我建议反对它…这会引入不必要的复杂性,实际上只是解决通过创建另一个问题 。 这是一个肯定的方式来结束这里 。 尝试使用上述方法之一来存储表数据。

为了更好地理解这是如何工作的,以及如何使自己的模型正常工作,我强烈建议您参考Java Tutorial , DefaultTableModel API及其源代码 。

将filter应用于JTable的正确方法是通过添加到TableRowSorter的RowFilter接口。 使用此界面,可以在不更改基础模型的情况下更改模型视图。 这种策略保留了模型 – 视图 – 控制器范例,而删除您希望从模型中隐藏的行本身会通过混淆您的关注点分离来打破范式。

JTable通常构成MVC实现的View部分。 您需要从模型中删除行。 应该监听这些更改的JTable将更新以反映此删除。 因此,您不会在JTable上找到removeRow()或类似的方法。

查看DefaultTableModel以获取可以使用的简单模型:

http://java.sun.com/javase/6/docs/api/javax/swing/table/DefaultTableModel.html

这扩展了AbstractTableModel,但应该足以满足基本目的。 您始终可以扩展AbstractTableModel并创建自己的。 确保你也在JTable上设置它。

http://java.sun.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html

有关将JTable与表模型一起使用的更多信息,请查看基本的Sun教程:

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#data

mmm很简单

 for( int i = model.getRowCount() - 1; i >= 0; i-- ) { model.removeRow(i); }