0

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

我的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);
}

现在,由于我显示的是一个空行,我希望用户编辑它,并且我假设用户会。现在,如何确保在用户进行更改时将数据保存在我的数组中?或者,如果这不可能,还有什么更好的选择?

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

在此处输入图像描述

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

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

4

1 回答 1

2

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

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

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

  • 在这个更高级的例子Timer中,一个SwingExecutor控制一系列SwingWorker实例。

在所有情况下,这些表都可以正常工作。您可以使用 any 作为sscce的基础。

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

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

于 2013-03-02T06:23:12.073 回答