2010-05-26 128 views
3

我有2个窗口,一个窗口显示JTable模型数据,当双击该行时会弹出一个新窗口来编辑数据,一旦提交,我该如何刷新JTableJava Swing:如何从另一个页面按钮刷新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负载会调用这个setUpTableData从数据库中检索数据。 在编辑窗口中,我在更新按钮上添加了一个动作侦听器来刷新表,但我不知道如何使jTable刷新更新的数据? ActionListener上的setUpTableData给了我空指针。

回答

2

一个解决方案是给编辑窗口一个他其他的实例JPanel。 (您可以通过将面板传递给编辑窗口的构造函数来完成该操作)然后,您可以简单地在ActionListener内调用setUpTableData()方法。

要做到这一点可能看起来像以下代码:

编辑帧构造

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

更新的ActionListener

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

感谢您的回复你好,不好意思不相当通过给e其他JPanel的实例来获得你的意思吗?怎么做?谢谢 – user236501 2010-05-26 13:39:09

+0

@newbie - 我的猜测是,他的意思是,当创建另一个JPanel时,这个应该有一个主面板的引用(例如参数中给出的),以便它能够调用你的方法,从那里”。 – Gnoupi 2010-05-26 13:40:18

+0

因此,在构造函数中我需要指定什么? – user236501 2010-05-26 13:40:19