我有JTable
。此表使用我设计的自定义模型;自定义模型为extends AbstractTableModel
。我有一个按钮,用户可以删除选定/突出显示的行。
我已尝试过这段代码,但它给了我一个类强制转换异常 -
myTableModel cannot be cast to DefaultTableModel.
以下是代码。
DefaultTableModel model = (DefaultTableModel)table.getModel();
model.removeRow(table.convertRowIndexToModel(table.getSelectedRow()));
model.fireTableDataChanged();`
我在网上搜索过但总是DefaultTableModel
- 但我有AbstarctTableModel
。
我们如何解决这个问题?
答案 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>