我正在使用Swing在Java中进行应用程序。我有两个表,我必须将内容从一个表复制到另一个表(复制。)问题是如果我清除目标表行,那么我的源表行也会被删除。
如果我按CopyAll,我会将所有内容从Table-A
复制到Table-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()
。
答案 0 :(得分:4)
您已在两个表之间复制了TableModel
。这意味着两个表共享相同的数据。如果删除TableModel
的内容,则两个表都将丢失其数据。
您应该创建两个单独的TableModel
实例,并使它们保持同步(例如,每次更新模型时,使用一个侦听器作为TableModel
触发事件)
答案 1 :(得分: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);
}
答案 2 :(得分:2)
两个表都使用相同的模型。您必须为表B提供自己的模型,手动复制值。您当前的copyAll
方法将引用复制到表模型,它不会复制内容。
答案 3 :(得分:1)
这是因为您共享了两个表的TableModel。在复制方法中,您应该创建模型的克隆并将克隆用于第二个表。
答案 4 :(得分: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);
}