如何从JTable中删除一行?[已关闭]

2022-09-02 14:26:38

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


答案 1

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

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

答案 2

如果您需要一个简单的工作解决方案,请尝试使用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和它的源代码


推荐