使用AbstractTableModel从JTable中删除行

时间:2015-01-29 15:05:39

标签: java swing jtable defaulttablemodel abstracttablemodel

我有JTable。此表使用我设计的自定义模型;自定义模型为extends AbstractTableModel。我有一个按钮,用户可以删除选定/突出显示的行。

我已尝试过这段代码,但它给了我一个类强制转换异常 -

myTableModel cannot be cast to DefaultTableModel. 

以下是代码。

DefaultTableModel model =  (DefaultTableModel)table.getModel();
        model.removeRow(table.convertRowIndexToModel(table.getSelectedRow()));
        model.fireTableDataChanged();`

我在网上搜索过但总是DefaultTableModel - 但我有AbstarctTableModel

我们如何解决这个问题?

1 个答案:

答案 0 :(得分:6)

  

我试过这段代码,但它给了我一个类强制转换异常 -   myTableModel无法强制转换为DefaultTableModel。

错误非常明显:假设您为表提供了自己的表模型,那么table.getModel()将无法返回DefaultTableModel个实例。

  

我们如何解决这个问题?

通过将table.getModel()下放到相应的类(您的类)。然后调用您提供的方法从表模型中删除一行。例如:

int modelRowIndex = table.convertRowIndexToModel(table.getSelectedRow());
MyTableModel model = (MyTableModel)table.getModel();
model.removeRowFromMyModel(modelRowIndex);

查看从this question AbstractTableModel延伸的自定义表格模型的完整示例。

题外话

我们永远不应该从外部明确地调用任何fireXxx()方法。这些是在需要时由AbstractTableModel子类在内部调用的。恕我直言,这些应该是protected而不是public,以避免错误地使用它们。但出于某种原因,我并不知道他们是public。{/ p>