Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 清除一个JTable中的数据也会删除另一个JTable_Java_Swing_Jtable_Tablemodel - Fatal编程技术网

Java 清除一个JTable中的数据也会删除另一个JTable

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);

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

如果我按CopyAll,那么我会将所有内容从
表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);
}