如何从JTable中删除一行?[已关闭]
我想从JTable中删除一些行。我该怎么做?
为了从 JTable 中删除一行,您需要从基础 TableModel 中删除目标行。例如,如果您的 TableModel 是 DefaultTableModel 的一个实例,则可以通过执行以下操作来删除一行:
((DefaultTableModel)myJTable.getModel()).removeRow(rowToRemove);
如果您需要一个简单的工作解决方案,请尝试使用DefaultTableModel。
如果您已经创建了自己的表模型,该模型扩展了 AbstractTableModel,那么您还应该实现 removeRow() 方法。确切的实现取决于您用于存储数据的底层结构。
例如,如果您使用过Vector,那么它可能是这样的:
public class SimpleTableModel extends AbstractTableModel {
private Vector<String> columnNames = new Vector<String>();
// Each value in the vector is a row; String[] - row data;
private Vector<String[]> data = new Vector<String[]>();
...
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<String[]> arr = new ArrayList<String[]>();
public void removeRow(int row) {
data.remove(row);
}
哈希地图:
//Integer - row number; String[] - row data;
HashMap<Integer, String[]> data = new HashMap<Integer, String[]>();
public void removeRow(Integer row) {
data.remove(row);
}
如果您使用的是像这样的数组
String[][] data = { { "a", "b" }, { "c", "d" } };
那么你就不走运了,因为没有办法从数组中动态删除元素。你可以尝试使用数组,分别存储一些标志,通知哪些行被删除,哪些行没有被删除,或者通过一些其他狡猾的方式,但我建议不要这样做......这将带来不必要的复杂性,实际上只是通过创建另一个问题来解决一个问题。这是在这里结束的必经之路。请尝试上述方法之一来存储表数据。
为了更好地理解它是如何工作的,以及如何使你自己的模型正常工作,我强烈建议你参考Java教程,DefaultTableModel API和它的源代码。