使用 AbstractTableModel 从 JTable 中删除一行
Removing a row from a JTable using AbstractTableModel
我有一个JTable
。这个 table 使用的是我设计的自定义模型;自定义模型是 extends AbstractTableModel
。我有一个按钮,可以让用户删除 selected/highlighted 行。
我试过这段代码,但它给了我一个 class 转换异常 -
myTableModel cannot be cast to DefaultTableModel.
下面是代码。
DefaultTableModel model = (DefaultTableModel)table.getModel();
model.removeRow(table.convertRowIndexToModel(table.getSelectedRow()));
model.fireTableDataChanged();`
我在网上搜索过,但它总是 DefaultTableModel
- 但我有 AbstarctTableModel
。
我们如何解决这个问题?
I have tried this code but its giving me a class cast exception -
myTableModel cannot be cast to DefaultTableModel.
这个错误是不言自明的:假设你为 table 提供了你自己的 table 模型,那么 table.getModel()
永远不会 return DefaultTableModel
实例.
How do we solve this?
通过向下转换 table.getModel()
到适当的 class(您的 class)。然后调用您提供的方法从 table 模型中删除一行。例如:
int modelRowIndex = table.convertRowIndexToModel(table.getSelectedRow());
MyTableModel model = (MyTableModel)table.getModel();
model.removeRowFromMyModel(modelRowIndex);
查看从 this question 中的 AbstractTableModel
扩展的自定义 table 模型的完整示例。
题外话
我们绝不应该从外部显式调用任何 fireXxx()
方法。这些旨在在需要时由 AbstractTableModel
subclasses 在内部调用。恕我直言,这些应该是 protected
而不是 public
,以避免错误地使用它们。但出于某种原因,我不知道他们制造了它们 public
。
我有一个JTable
。这个 table 使用的是我设计的自定义模型;自定义模型是 extends AbstractTableModel
。我有一个按钮,可以让用户删除 selected/highlighted 行。
我试过这段代码,但它给了我一个 class 转换异常 -
myTableModel cannot be cast to DefaultTableModel.
下面是代码。
DefaultTableModel model = (DefaultTableModel)table.getModel();
model.removeRow(table.convertRowIndexToModel(table.getSelectedRow()));
model.fireTableDataChanged();`
我在网上搜索过,但它总是 DefaultTableModel
- 但我有 AbstarctTableModel
。
我们如何解决这个问题?
I have tried this code but its giving me a class cast exception - myTableModel cannot be cast to DefaultTableModel.
这个错误是不言自明的:假设你为 table 提供了你自己的 table 模型,那么 table.getModel()
永远不会 return DefaultTableModel
实例.
How do we solve this?
通过向下转换 table.getModel()
到适当的 class(您的 class)。然后调用您提供的方法从 table 模型中删除一行。例如:
int modelRowIndex = table.convertRowIndexToModel(table.getSelectedRow());
MyTableModel model = (MyTableModel)table.getModel();
model.removeRowFromMyModel(modelRowIndex);
查看从 this question 中的 AbstractTableModel
扩展的自定义 table 模型的完整示例。
题外话
我们绝不应该从外部显式调用任何 fireXxx()
方法。这些旨在在需要时由 AbstractTableModel
subclasses 在内部调用。恕我直言,这些应该是 protected
而不是 public
,以避免错误地使用它们。但出于某种原因,我不知道他们制造了它们 public
。