将值插入到不同JFrame中的两个单独表中的最佳方法是什么?

时间:2015-04-08 20:10:31

标签: java jtable tablemodel

我有关于将值解析到其他表的问题。

我有一个包含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?提取表模型标题但不是数据......

非常感谢您的帮助,请告诉我这是完全错误的......

2 个答案:

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

}
}

感谢您的帮助。未来可能会帮助别人......