【问题标题】:HowTo Remove a Row in a JTable with a Custom TableModel如何使用自定义 TableModel 删除 JTable 中的一行
【发布时间】:2011-06-01 06:29:24
【问题描述】:

我一直在阅读与我类似的帖子,并通过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 函数什么都不做。该行仍然存在。如何只删除特定行?

谢谢,

【问题讨论】:

  • 过滤器对象来自哪里? @njozwiak

标签: java jtable delete-row tablemodel abstracttablemodel


【解决方案1】:

fireTableRowsDeleted 的调用只是触发事件以指示行已被删除,您仍然需要从模型中实际删除它们。

【讨论】:

  • 从模型中删除它是什么意思?那是删除诸如-2D数组之类的数据吗? :D
  • 是的,remove 方法需要从用于内部保存数据的任何数据结构中实际删除数据。
【解决方案2】:

我一发这个就想通了。

行内容基于过滤器列表:

public int getRowCount() { return filters.size(); }

我的问题是我试图删除一行而不将其从列表中删除。所以我将removeRow()修改为如下:

public void removeRow(int row)
{
    filters.remove(row);
    fireTableRowsDeleted(row, row);
}

它就像一个魅力。

干杯

【讨论】:

    【解决方案3】:

    我认为这就是答案:

    final int row = selectedRow;
    EventQueue.invokeLater(new Runnable() {
           public void run() {
                 model.removeRow(row);
           }
    });
    

    编辑完成后该行将被删除。

    【讨论】:

      猜你喜欢
      • 2019-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 1970-01-01
      相关资源
      最近更新 更多