我在我的JTable中添加一个空行(实现AbstractTableModel)。如何实时更新我的​​模型?

时间:2013-03-02 05:53:02

标签: java arrays swing jtable abstracttablemodel

好的,我认为标题就是我在这里要问的全部。

我的AbstractTableModel工作正常,当我想添加一个空行时,我使用以下代码执行此操作:

public void addRow() {
    Object[][] oldData = data;
    data = new Object[oldData.length + 1][3];

    // Copy old data to new data
    for (int x = 0; x < oldData.length; x++) { 
        data[x] = oldData[x]; 
    } 

    // Append new row 
    data[oldData.length] = new Object[] {"", "", false}; 

    fireTableRowsInserted(data.length - 2, data.length - 1);
}

现在,由于我显示一个空行,我希望用户编辑它,我认为用户会。现在,当用户进行更改时,如何确保数据保存在我的阵列中?或者,如果那不可能,有什么更好的选择呢?

好的,我应该解释一下我想做什么:

enter image description here

我正在从文件加载内容,并显示为表格。现在,用户可以在单击Add Row按钮时向表中添加新行。这将为每次点击添加1个空行。 (在上图中是按下按钮两次的实例。

现在,我希望用户可以编辑单元格,然后可能删除一些行(可能)但是在单击Save Database按钮时,表中的更新数据是存储。

1 个答案:

答案 0 :(得分:2)

通过比较几种方法,您可以更好地理解:

  • 在此example中,后台线程或按钮可以向表中添加新行。后台线程通过Runnable在EDT上对invokeLater()的实例进行排序。它在概念上更容易理解,但也更容易出错。

  • SwingWorker封装了对共享数据的排序访问。 APItutorial显示了使用publish() / process()更新组件模型的基本方法。这种首选机制更加强大和可扩展。

  • 在这个更高级的example中,Swing Timer可以控制一系列Executor个实例的SwingWorker

在所有情况下,表格仍然有效。您可以使用any作为sscce的基础。

附录:你能解释一下你建议的策略吗?

我已经更新了示例列表,并建议在上下文中查找一些内容。