Java 清除一个JTable中的数据也会删除另一个JTable
我正在用Swing用Java做一个应用程序。我有两个表,我必须将内容从一个表复制到另一个表(复制)。问题是,如果我清除了目标表行,那么我的源表行也会被删除 如果我按CopyAll,那么我会将所有内容从Java 清除一个JTable中的数据也会删除另一个JTable,java,swing,jtable,tablemodel,Java,Swing,Jtable,Tablemodel,我正在用Swing用Java做一个应用程序。我有两个表,我必须将内容从一个表复制到另一个表(复制)。问题是,如果我清除了目标表行,那么我的源表行也会被删除 如果我按CopyAll,那么我会将所有内容从表A复制到表B。如果按clear,则必须清除表B。但问题是表-A也得到了澄清 用于复制 public void copyAll() { TableModel tableAModel = tableA.getModel(); tableB.setModel(tableAModel);
表A
复制到表B
。如果按clear,则必须清除表B
。但问题是表-A
也得到了澄清
用于复制
public void copyAll() {
TableModel tableAModel = tableA.getModel();
tableB.setModel(tableAModel);
repaint();
}
用于清除行(我正在为表B
执行)
我想在copyAll()方法中复制时遇到了问题。我正在获取tableA
的模型,然后在clearTable()
方法中清除它
如果上述
copyAll()
方法错误,请告诉我如何实现copyAll()
,removeTableB()
您已经在两个表之间复制了TableModel
。这意味着两个表共享相同的数据。如果删除表格模型的内容
,两个表格都将丢失其数据
您应该创建两个独立的
TableModel
实例,并使它们保持同步(例如,在每次更新模型时TableModel
触发事件时使用侦听器)这是因为您为两个表共享了TableModel。在复制方法中,您应该创建模型的克隆,并将克隆用于第二个表。两个表使用相同的模型。您必须为表B提供自己的模型,手动复制值。当前的copyAll
方法将引用复制到表模型,但不会复制内容。如果使用DefaultTableModel
可以使用getDataVector()
和clone()
从模型中获取数据的Vector
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);
}
public void copyAll(){
TableModel tableAModel=tableA.getModel(),tableModelB;
向量tableModelBDataVector=((DefaultTableModel)tableAModel.getDataVector();
int tableModelAColumnCount=tableAModel.getColumnCount();
向量tableModelAColumnVector=新向量(tableModelAColumnCount);
对于(int i=0;i
在复制版本中,将第一个表的型号设置为第二个表。因此,这两个表共享同一个模型。您应该制作模型的副本:
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);
}
public void copyAll(){
最终的TableModel tableAModel=tableA.getModel();
最终DefaultTableModel副本=新的DefaultTableModel(tableAModel.getRowCount(),0);
for(int column=0;column
非常感谢。但是我如何才能创建TableModel的副本,而不是在copyAll()方法中使用原始的一次引用?复制table model中的数据而不是table model中的数据?您的意思是,我必须在tableA的每个值(行、列)处,然后将其粘贴到tableB rt中的相应单元格中?这是唯一的方法吗?@Amarnath是的,为了制作副本,您必须迭代所有值
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);
}