2010-05-26 127 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