我一直在阅读类似于我的帖子,并通过Java tutorial page阅读,但我似乎无法让这个工作。我不确定我是否遗漏了一些基本的东西......
我在下面有一个自定义表模型,我需要能够从中删除行。该表初始化为空,并通过组合框和添加按钮添加行。还有一个删除按钮,需要从表中删除所选行。
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
函数不执行任何操作。该行仍然存在。你怎么只删除一个特定的行?
谢谢,
答案 0 :(得分:5)
对fireTableRowsDeleted
的调用只会触发事件以指示已删除行,您仍需要将其从模型中删除。
答案 1 :(得分:4)
我发布这篇文章后,我立即知道了。
行内容基于过滤器列表:
public int getRowCount() { return filters.size(); }
我的问题是我试图删除一行而不从列表中删除它。所以我将removeRow()
修改为以下内容:
public void removeRow(int row)
{
filters.remove(row);
fireTableRowsDeleted(row, row);
}
它就像一个魅力。
欢呼声
答案 2 :(得分:0)
我认为这就是答案:
final int row = selectedRow;
EventQueue.invokeLater(new Runnable() {
public void run() {
model.removeRow(row);
}
});
编辑完成后,该行将被删除。