如何克隆一个jtable
how to clone a jtable
先生们,
简而言之,我的问题是"how do you clone a jTable in a GUI developed in Netbeans."
更详细一点,我有一个 jTabbedPane
,它由两个选项卡组成 - myTab1
和 myTab2
。这两个选项卡都有一个 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;
}
}
先生们,
简而言之,我的问题是"how do you clone a jTable in a GUI developed in Netbeans."
更详细一点,我有一个 jTabbedPane
,它由两个选项卡组成 - myTab1
和 myTab2
。这两个选项卡都有一个 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;
}
}