繁体   English   中英

如何使用自定义TableModel删除JTable中的行

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM