将值插入不同 JFrame 中的两个单独表的最佳方法是什么?
What is the best way to insert values into two separate tables in different JFrames?
我对将值解析为不同的 table 有疑问。
我有一个包含 JTable 的用户界面。
我还有一个与另一个 Jtable 的管理界面。
如果用户向用户界面 JFrame 中的 JTable 添加了一行,我需要它来更新或将相同的数据插入存储在不同 JFrame 中的管理 table。
最好的方法是什么?
目前我有三个类:
Main - 包含插入 table 值的所有方法:
public class Main1 {
public Object[][] userData;
public Object[][] adminData;
final public String[] userColumns = {"Acc Number", "Firstname", "Lastname", "Cost ","Hours", "Time","Date","Approved"};
final public String[] adminColumns = {"Acc Number", "Firstname", "Lastname", "Cost ","Hours", "Time","Date","Approved"};
final DefaultTableModel userTableModel = new DefaultTableModel(userData, userColumns);
final DefaultTableModel adminTableModel = new DefaultTableModel(adminData, adminColumns);
final JTable userTable = new JTable(userTableModel);
final JTable adminTable1 = new JTable(adminTableModel);
public static void main(String[] args) {
UserGUI gui = new UserGUI();
gui.GUI();
}
public class ADD implements ActionListener {
public void actionPerformed(ActionEvent ev) {
userTableModel.addRow(new Object[]{1, 1, 1, 1, 1, 1, 1, 1});
adminTableModel.addRow(new Object[]{1, 1, 1, 1, 1, 1, 1, 1});adminTableModel.fireTableDataChanged();
}
}
}
User - 在 Main table 中调用 ADD 方法,直接的 actionlistener。 JTable 使用以下内容拉取:
JPanel userTablePanel = new JPanel();
userTablePanel.setLayout(null);
userTablePanel.setBorder(BorderFactory.createTitledBorder(null, "Request History", TitledBorder.LEFT, TitledBorder.CENTER, new Font("Trebuchet MS", Font.PLAIN, 14), Color.BLACK));
userTablePanel.setBounds(0, 320, frameWidth, 200);
int tablePadding = 10;
JScrollPane userTableScrollPane = new JScrollPane();
userTableScrollPane.setBounds(tablePadding, 20, frameWidth - (2 * tablePadding), 180 - tablePadding);
userTableScrollPane.setBackground(Color.lightGray);
userTable.setModel(userTableModel);
userTableScrollPane.setViewportView(userTable);
userTableScrollPane.getViewport().setBackground(new Color(230,230,230));
userTablePanel.setBackground(Color.LIGHT_GRAY);
userTable.setBackground(new Color(150,150,150));
userTable.setVisible(true);
userTableScrollPane.setVisible(true);
userTablePanel.add(userTableScrollPane);
Admin - 显示 Table 和 Headers 但不插入来自上述 "ADD" 方法的数据...
adminTable.setModel(adminTableModel);
adminTableModel.addRow(new Object[]{1, 1, 1, 1, 1, 1, 1, 1}); <--This works in its own class but doesnt work outside class....
userTableScrollPane.setViewportView(adminTable);
userTableScrollPane.getViewport().setBackground(new Color(230,230,230));
adminTable.setVisible(true);
userTableScrollPane.setVisible(true);
本质上,我所追求的是,如何将 Main "ADD" 方法中的值插入 Admin JTable? Table模型Headers被拉取但数据没有被拉取...
非常感谢您的帮助,如果这完全错误,请告诉我...
共享 TableModel:
DefaultTableModel model = new DefaultTableModel(...);
JTable table1 = new JTable( model );
JTable table2 = new JTable( model );
当您对 table1 进行更改时,更改将反映在 table2 中(反之亦然),因为两者 table 共享相同的 TableModel。
另外,不要使用空布局!!!不要使用 setBounds()!!! Swing 旨在与布局管理器一起使用,原因太多,无法在此处列出。
感谢您的帮助,我找到了解决方案。
我需要解析 DefaultTableModel;其中包含数据,作为参数而不是实际的 JTable,愚蠢的错误。
主要Class - 打开AdminGUI方法:
传递了全局存储在 Main Class.
中的 userTableModel
public Object[][] userData;
final public String[] userColumns = {"Acc Number", "Firstname", "Lastname", "Cost ","Hours", "Time","Date","Approved"};
final DefaultTableModel userTableModel = new DefaultTableModel(userData, userColumns);
final JTable userTable = new JTable(userTableModel);
public class ADMIN implements ActionListener {
public void actionPerformed(ActionEvent ev) {
AdminGUI a = new AdminGUI(userTableModel);
a.getClass();
}
}
AdminGUI Class
管理员 Class 需要将 TabelModel 解析为新的 JTable,这似乎工作正常。
public final class AdminGUI extends System1 {
public AdminGUI(DefaultTableModel userTableModelClone) {
JTable adminTable = new JTable(userTableModelClone);
adminTable.setModel(userTableModelClone);
}
}
感谢您的帮助。将来可能会帮助别人...
我对将值解析为不同的 table 有疑问。
我有一个包含 JTable 的用户界面。 我还有一个与另一个 Jtable 的管理界面。
如果用户向用户界面 JFrame 中的 JTable 添加了一行,我需要它来更新或将相同的数据插入存储在不同 JFrame 中的管理 table。
最好的方法是什么?
目前我有三个类:
Main - 包含插入 table 值的所有方法:
public class Main1 {
public Object[][] userData;
public Object[][] adminData;
final public String[] userColumns = {"Acc Number", "Firstname", "Lastname", "Cost ","Hours", "Time","Date","Approved"};
final public String[] adminColumns = {"Acc Number", "Firstname", "Lastname", "Cost ","Hours", "Time","Date","Approved"};
final DefaultTableModel userTableModel = new DefaultTableModel(userData, userColumns);
final DefaultTableModel adminTableModel = new DefaultTableModel(adminData, adminColumns);
final JTable userTable = new JTable(userTableModel);
final JTable adminTable1 = new JTable(adminTableModel);
public static void main(String[] args) {
UserGUI gui = new UserGUI();
gui.GUI();
}
public class ADD implements ActionListener {
public void actionPerformed(ActionEvent ev) {
userTableModel.addRow(new Object[]{1, 1, 1, 1, 1, 1, 1, 1});
adminTableModel.addRow(new Object[]{1, 1, 1, 1, 1, 1, 1, 1});adminTableModel.fireTableDataChanged();
}
}
}
User - 在 Main table 中调用 ADD 方法,直接的 actionlistener。 JTable 使用以下内容拉取:
JPanel userTablePanel = new JPanel();
userTablePanel.setLayout(null);
userTablePanel.setBorder(BorderFactory.createTitledBorder(null, "Request History", TitledBorder.LEFT, TitledBorder.CENTER, new Font("Trebuchet MS", Font.PLAIN, 14), Color.BLACK));
userTablePanel.setBounds(0, 320, frameWidth, 200);
int tablePadding = 10;
JScrollPane userTableScrollPane = new JScrollPane();
userTableScrollPane.setBounds(tablePadding, 20, frameWidth - (2 * tablePadding), 180 - tablePadding);
userTableScrollPane.setBackground(Color.lightGray);
userTable.setModel(userTableModel);
userTableScrollPane.setViewportView(userTable);
userTableScrollPane.getViewport().setBackground(new Color(230,230,230));
userTablePanel.setBackground(Color.LIGHT_GRAY);
userTable.setBackground(new Color(150,150,150));
userTable.setVisible(true);
userTableScrollPane.setVisible(true);
userTablePanel.add(userTableScrollPane);
Admin - 显示 Table 和 Headers 但不插入来自上述 "ADD" 方法的数据...
adminTable.setModel(adminTableModel);
adminTableModel.addRow(new Object[]{1, 1, 1, 1, 1, 1, 1, 1}); <--This works in its own class but doesnt work outside class....
userTableScrollPane.setViewportView(adminTable);
userTableScrollPane.getViewport().setBackground(new Color(230,230,230));
adminTable.setVisible(true);
userTableScrollPane.setVisible(true);
本质上,我所追求的是,如何将 Main "ADD" 方法中的值插入 Admin JTable? Table模型Headers被拉取但数据没有被拉取...
非常感谢您的帮助,如果这完全错误,请告诉我...
共享 TableModel:
DefaultTableModel model = new DefaultTableModel(...);
JTable table1 = new JTable( model );
JTable table2 = new JTable( model );
当您对 table1 进行更改时,更改将反映在 table2 中(反之亦然),因为两者 table 共享相同的 TableModel。
另外,不要使用空布局!!!不要使用 setBounds()!!! Swing 旨在与布局管理器一起使用,原因太多,无法在此处列出。
感谢您的帮助,我找到了解决方案。
我需要解析 DefaultTableModel;其中包含数据,作为参数而不是实际的 JTable,愚蠢的错误。
主要Class - 打开AdminGUI方法: 传递了全局存储在 Main Class.
中的 userTableModelpublic Object[][] userData;
final public String[] userColumns = {"Acc Number", "Firstname", "Lastname", "Cost ","Hours", "Time","Date","Approved"};
final DefaultTableModel userTableModel = new DefaultTableModel(userData, userColumns);
final JTable userTable = new JTable(userTableModel);
public class ADMIN implements ActionListener {
public void actionPerformed(ActionEvent ev) {
AdminGUI a = new AdminGUI(userTableModel);
a.getClass();
}
}
AdminGUI Class 管理员 Class 需要将 TabelModel 解析为新的 JTable,这似乎工作正常。
public final class AdminGUI extends System1 {
public AdminGUI(DefaultTableModel userTableModelClone) {
JTable adminTable = new JTable(userTableModelClone);
adminTable.setModel(userTableModelClone);
}
}
感谢您的帮助。将来可能会帮助别人...