如何克隆一个jtable

how to clone a jtable

先生们,

简而言之,我的问题是"how do you clone a jTable in a GUI developed in Netbeans."

更详细一点,我有一个 jTabbedPane,它由两个选项卡组成 - myTab1myTab2。这两个选项卡都有一个 jTable 将显示来自 derby 数据库的列。每当数据库中的数据更新时,我都希望 jTables 都更新以反映新信息。本质上,这两个 jTables 将在每个单元格中显示相同的数据,并且任何时候对一个进行更改时都会自动更改另一个。

显然,我可以手写。任何时候执行子例程(更改数据库中的数据)时,我都可以使用 UpdateMyTable1()UpdateMyTable2() 例程来进行更改。然而,在我的例子中,UpdateMyTable1() function/method/subroutine 需要相当长,而 UpdateMyTable1() 将包含与 UpdateMyTable2() 几乎相同的代码。会有很多冗余代码。

在 Neatbeans 中,有没有一种方法可以实例化(或以其他方式创建)两个 jTables,使它们始终相互镜像彼此的内容,而无需手写代码?

解决方案很简单:不要考虑 "cloning",而是让两个 JTables 共享 table 模型。像

这样简单的东西
table1.setModel(table2.getModel());

可以工作。

如果它们共享模型,则模型中的更改将在两个 JTable 中同等显示。

这里是 'cloning' 模型共享表的工作示例。您可以通过双击单元格来编辑值。更改反映在所有表格中。

您应该为您的 IDE 中的所有表设置公共模型,并且所有数据更新都应该在这个公共模型上运行。

import javax.swing.*;
import java.awt.*;

public class CloningTablesExample {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(CloningTablesExample::runApp);
    }

    static void runApp(){
        JTable original = new JTable(new Object[][]{
                {"v1", "v2"},
                {"v4", "v5"}
            },
            new String[]{"col1", "col2"}
        );

        JFrame window = new JFrame();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.getContentPane().setLayout(new GridLayout(1,3));
        window.setSize(400, 300);
        window.setVisible(true);
        window.getContentPane().add(new JScrollPane(original));
        window.getContentPane().add(new JScrollPane(cloneTable(original)));
        window.getContentPane().add(new JScrollPane(cloneTable(original)));
    }

    private static JTable cloneTable(JTable original) {
        JTable clone = new JTable();
        clone.setModel(original.getModel());
        return clone;
    }
}