如何从JTable中删除一行?

14 java swing jtable

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

Bra*_*lor 35

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

((DefaultTableModel)myJTable.getModel()).removeRow(rowToRemove);
Run Code Online (Sandbox Code Playgroud)

  • 好吧,如果您创建了自己的自定义TableModel,那么您有责任创建自己的"removeRow"方法.查看DefaultTableModel的源代码以了解如何完成此操作.简单的解决方案是使用DefaultTableModel.为什么您认为需要创建自定义TableModel?在您了解使用模型的基础知识之前,请使用提供的默认值. (4认同)

Kir*_*hak 8

如果您需要一个简单的工作解决方案,请尝试使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您使用过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);
}
Run Code Online (Sandbox Code Playgroud)

HashMap的:

//Integer - row number; String[] - row data;
HashMap<Integer, String[]> data = new HashMap<Integer, String[]>();

public void removeRow(Integer row) {
    data.remove(row);
}
Run Code Online (Sandbox Code Playgroud)

如果你使用像这样的数组

String[][] data = { { "a", "b" }, { "c", "d" } };
Run Code Online (Sandbox Code Playgroud)

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

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


小智 5

嗯是很简单的家伙

for( int i = model.getRowCount() - 1; i >= 0; i-- )
{
    model.removeRow(i);
}
Run Code Online (Sandbox Code Playgroud)


dav*_*ave 3

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