繁体   English   中英

Java Swing:如何从另一个页面按钮刷新JTable模型

[英]Java Swing : How to refresh JTable Model from another page button

我有2个窗口,一个窗口显示了JTable Model数据,当双击该行时会弹出一个新窗口来编辑数据,一旦提交我怎样才能刷新JTable

Customer.java:

JPanel getJPanel() {
    if (jPanel == null) {

        jPanel = new JPanel();
        jPanel.setLayout(null);
        jPanel.setSize(new Dimension(792, 420));
        jPanel.add(getJScrollPane(), null);
        setUpTableData();
    }
   JScrollPane getJScrollPane() {
    if (jScrollPane == null) {
        jScrollPane = new JScrollPane();
        jScrollPane.setBounds(new Rectangle(20, 166, 759, 241));
        jScrollPane.setViewportView(getJTable());
    }
    return jScrollPane;
}

   JTable getJTable() {
    if (jTable == null) {
        jTable = new JTable();
        jTable.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent e) {
                new ContactEdit(name,email,phoneNo,phoneNo2,id).getJInternalFrame().setVisible(true);
                }
            }
        });
        DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel();
        String[] colName = {"No." ,"Name", "Email","Contact No. 1","Contact No. 2","ID"};
        tableModel.setColumnIdentifiers(colName);
        jTable.getTableHeader().setBackground(Color.WHITE);
        jTable.getTableHeader().setForeground(Color.BLUE);
        Font Tablefont = new Font("DialogInput",Font.BOLD,12); 
        jTable.getTableHeader().setFont(Tablefont);

    }
    return jTable;
}
   public void setUpTableData() {
    DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel();
    ArrayList<Address> list = sql.getContactLists();
    int i = 0;
    for (i = 0; i < list.size(); i++) {
        String[] bill = new String[6];
        for (int j = 0; j < 6; j += 6) {
            bill[j] = Integer.toString(i);
            bill[j + 1] = list.get(i).getName();
            bill[j + 2] = list.get(i).getEmail();
            bill[j + 3] = list.get(i).getPhoneNo();
            bill[j + 4] = list.get(i).getPhoneNo2();
            bill[j + 5] = list.get(i).getId();
        }
        tableModel.addRow(bill);
    }
    jTable.setModel(tableModel);
}

Edit.java

private JButton getJButton() {
    if (jButton == null) {
        jButton = new JButton();
        jButton.setBounds(new Rectangle(155, 138, 85, 25));
        jButton.setText("Update");
        jButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent e) {
                Address a = new Address(jTextField1.getText(),jTextField.getText(),jTextField3.getText(),jTextField2.getText(),"");
                                    sql.updateContact(a, Integer.parseInt(getJTextField4().getText()));                 
                            Customer c = new Customer();
                            c.setUpTableData();
                getJInternalFrame().setVisible(false);
                getJInternalFrame().dispose();
            }
        });
    }
    return jButton;
}

JPanel Load将调用此setUpTableData以从数据库中检索数据。 在编辑窗口中,我在更新按钮上添加了一个动作监听器来刷新表,但我不知道如何让jTable刷新更新的数据? ActionListener上的setUpTableData给我Null指针。

一种解决方案是给编辑窗口一个其他JPanel的实例。 (您可以通过将面板传递到编辑窗口的构造函数来完成此操作)然后,您只需从ActionListener内部调用setUpTableData()方法即可。

执行此操作的代码可能如下所示:

编辑框架构造函数

public EditFrame(CustomerListFrame cListFrame, ... other params) {
    this.cListFrame = cListFrame;
}

更新ActionListener

public void actionPerforment(ActionEvent e) {
    cListFrame.setUpTableData(the new data);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM