[英]HowTo Remove a Row in a JTable with a Custom TableModel
我一直在阅读与我的文章相似的文章,并阅读Java教程页面,但似乎无法正常工作。 我不确定是否缺少基本知识...
我下面有一个自定义表模型,我需要能够从中删除行。 该表初始化为空,并通过组合框和添加按钮添加行。 还有一个删除按钮,需要从表中删除选定的行。
class TableModel extends AbstractTableModel
{
private String[] columnNames = {"Enabled", "Value" };
protected Class[] columnClasses = new Class[] { Boolean.class, String.class };
public int getColumnCount() { return columnNames.length; }
public int getRowCount() { return filters.size(); }
public String getColumnName(int col) { return columnNames[col]; }
public Class getColumnClass(int col) { return columnClasses[col]; }
public Object getValueAt(int row, int col) { ... }
public void setValueAt(Object value, int row, int col) { ... }
public void addRow(String value)
{
fireTableRowsInserted(filters.size() - 1, filters.size() - 1);
int row = filters.size() -1 ;
int col = 1;
setValueAt(value, row, col);
}
public void removeRow(int row)
{
fireTableRowsDeleted(selectedRow, selectedRow);
}
}
我已确认selectedRow
在控制台中的打印中包含正确的行。 fireTableRowsDeleted
函数只是不执行任何操作。 该行仍然存在。 您如何删除特定行?
谢谢,
调用fireTableRowsDeleted
只会触发事件以指示行已被删除,您实际上仍需要从模型中将其删除。
我发布此消息后,马上就知道了。
行内容基于过滤器列表:
public int getRowCount() { return filters.size(); }
我的问题是我试图删除行而不将其从列表中删除。 因此,我将removeRow()
修改为以下内容:
public void removeRow(int row)
{
filters.remove(row);
fireTableRowsDeleted(row, row);
}
它就像一种魅力。
干杯
我认为这是答案:
final int row = selectedRow;
EventQueue.invokeLater(new Runnable() {
public void run() {
model.removeRow(row);
}
});
编辑完成后,该行将被删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.