[英]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.