2

我正在使用 Swing 在 Java 中做一个应用程序。我有两个表,我必须将内容从一个表复制到另一个(复制)。问题是如果我清除目标表行,那么我的源表行也会被删除。

如果我按 CopyAll,那么我会将所有内容从 复制Table-ATable-B. 如果我按清除,那么我必须清除Table-B。但问题Table-A也正在得到解决。

用于复印

public void copyAll() {
   TableModel tableAModel = tableA.getModel();
   tableB.setModel(tableAModel);
   repaint();
}

用于清除行(我正在为table-B

public void clearTableB() {
   DefaultTableModel clearTableData = (DefaultTableModel) tableB.getModel();
   clearTableData.setNumRows(0);
}

我认为在 copyAll() 方法中复制时遇到了问题。我正在获取tableA模型,然后在clearTable()方法中清除它。

如果上述copyAll()方法是错误的,请告诉我我该如何实现copyAll()removeTableB().

4

5 回答 5

4

您已经复制了TableModel两个表之间的值。这意味着两个表共享相同的数据。如果删除 的内容TableModel,两个表都会丢失它们的数据。

您应该创建两个单独TableModel的实例,并使它们保持同步(例如,TableModel每次更新模型时使用侦听器作为触发事件)

于 2012-08-14T08:12:55.863 回答
3

在您的副本版本中,您将第一个表的模型设置为第二个表。所以这两个表共享相同的模型。您应该复制模型:

public void copyAll() {
    final TableModel tableAModel = tableA.getModel();
    final DefaultTableModel copy = new DefaultTableModel(tableAModel.getRowCount(), 0);
    for (int column = 0; column < tableAModel.getColumnCount(); column++) {
        copy.addColumn(tableAModel.getColumnName(column));
        for (int row = 0; row < tableAModel.getRowCount(); row++)
            copy.setValueAt(tableAModel.getValueAt(row, column), row, column);
    }
    tableB.setModel(copy);
}
于 2012-08-14T08:53:43.713 回答
2

两个表都使用相同的模型。你必须给表 B 它自己的模型,手动复制值。您当前copyAll的方法复制对表模型的引用,它不复制内容

于 2012-08-14T08:13:46.907 回答
1

如果您正在使用DefaultTableModel您可以使用它从模型中获取Vector数据。getDataVector()clone()

public void copyAll() {
   TableModel tableAModel = tableA.getModel(), tableModelB;
   Vector tableModelBDataVector = ((DefaultTableModel)tableAModel).getDataVector();
   int tableModelAColumnCount = tableAModel.getColumnCount();
   Vector<String> tableModelAColumnVector = new Vector<String>(tableModelAColumnCount);
   for (int i = 0; i < tableModelAColumnCount; i++)
     tableModelAColumnVector.add(tableAModel.getColumnName(i));
   tableModelB = new DefaultTableModel((Vector)tableModelBDataVector.clone(), (Vector)tableModelAColumnVector.clone());
   tableB.setModel(tableModelB);
}
于 2012-08-14T08:50:10.230 回答
1

那是因为您共享了两个表的 TableModel。在复制方法中,您应该创建模型的克隆并将该克隆用于第二个表。

于 2012-08-14T08:12:58.033 回答