我有关于将值解析到其他表的问题。
我有一个包含JTable的用户界面。 我还有另一个Jtable的管理界面。
如果用户在用户界面JFrame中向JTable添加了一行,我需要它来更新或将相同的数据插入存储在不同JFrame中的管理表中。
最佳方法是什么?
目前我有三个班级:
Main - 包含插入表值的所有方法:
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();
}
}
}
用户 - 在Main表中调用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);
管理员 - 显示表格和标题但不插入上述“添加”方法中的数据...
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);
基本上,接下来是什么,如何将主“ADD”方法中的值插入Admin JTable?提取表模型标题但不是数据......
非常感谢您的帮助,请告诉我这是完全错误的......
答案 0 :(得分:1)
分享TableModel:
DefaultTableModel model = new DefaultTableModel(...);
JTable table1 = new JTable( model );
JTable table2 = new JTable( model );
当你对table1进行更改时,更改将反映在table2中(反之亦然),因为两个表共享相同的TableModel。
另外,不要使用空布局!不要使用setBounds()!!! Swing旨在与布局管理器一起使用,原因很多,无法在此处列出。
答案 1 :(得分:0)
感谢您的帮助,我找到了解决方案。
我需要解析DefaultTableModel;其中包含数据,作为参数而不是实际的JTable,这是一个愚蠢的错误。
主类 - 打开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类 Admin Class需要将TabelModel解析为一个似乎工作正常的新JTable。
public final class AdminGUI extends System1 {
public AdminGUI(DefaultTableModel userTableModelClone) {
JTable adminTable = new JTable(userTableModelClone);
adminTable.setModel(userTableModelClone);
}
}
感谢您的帮助。未来可能会帮助别人......