2013-04-12 78 views
0

更新一個JComponent我有一個JTabbedPane中,看起來像這樣:在JTabbedPane的

overview= new JTabbedPane(); 

      JComponent accountinfo= AccountOverview(guest.toString()); 
      overview.addTab ("Account Overview", accountinfo); 
      overview.setMnemonicAt(0, KeyEvent.VK_1); 


      JFrame tabbed= new JFrame("AIR Reservation"); 
      tabbed.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      tabbed.add(overview); 
      tabbed.setSize(650,500); 
      tabbed.setLocationRelativeTo(null); 
      tabbed.setVisible(true); 
     } 

guest.toString打印出客戶的信息。 我AccountOverview(guest.toString)方法是這樣的:

JPanel panel = new JPanel(false); 
    JLabel filler = new JLabel(text); 

    JButton editName= new JButton ("Edit Name"); 
    editName.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
       JFrame nameframe= new JFrame("Name Edit"); 
       String name = JOptionPane.showInputDialog(nameframe, "Change name to: "); 
       guest.setName(name); 
      } 
     }); 
    JButton editGender= new JButton ("Edit Gender"); 
    editGender.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
       JFrame genderframe= new JFrame("Gender Edit"); 
       String gender = JOptionPane.showInputDialog(genderframe, "Change gender to: "); 
       guest.setGender(gender); 
      } 
     }); 
    JButton editBirthday= new JButton ("Edit Birthday"); 
    editBirthday.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
       JFrame birthdayframe= new JFrame("Birthdate Edit"); 
       String birthday = JOptionPane.showInputDialog(birthdayframe, "Change birthdate to: "); 
       guest.setBirthDate(birthday); 
      } 
     }); 
    JButton editPassportNumber= new JButton ("Edit Passport Number"); 
    editPassportNumber.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
       JFrame passportframe= new JFrame("Passport Number Edit"); 
       int passnum= Integer.parseInt(JOptionPane.showInputDialog(passportframe, "Change passportnumber to: ")); 
       guest.setPassportNumber(passnum); 
      } 
     }); 
    panel.add(editName); 
    panel.add(editGender); 
    panel.add(editBirthday); 
    panel.add(editPassportNumber); 
    panel.add(destination); 
    filler.setHorizontalAlignment(JLabel.CENTER); 
    panel.add(filler); 
    return panel; 
} 

我想編輯的JComponent所以選項卡窗格反映新更新的變化。 例如,如果原始顯示是「名稱:管理員」,只需單擊「編輯名稱」並輸入「約翰」即可將原始顯示更改爲「姓名:約翰」。

編輯:我的toString()方法(來自另一個類,客戶)

//Returns the Customer object as a String. 
public String toString() 
{ 
    customerstring= "<html>Name: " + getName(); 
    customerstring+= "<br>Gender: " + getGender(); 
    customerstring+= "<br>Date of Birth: " + getBirthDate(); 
    customerstring+= "<br>Passport number: " + getPassportNumber(); 
    customerstring+= "<br>Balance: " + money.format(getMoney()); 
    return customerstring; 
} 

我如何修改我的密碼?

在此先感謝!

+0

@HovercraftFullOfEels對不起,toString方法是另一個類的一部分。我編輯了我的帖子以包含此方法。我最初發布的代碼來自我的GUI類。 – nichi

回答

0

In:JComponent accountinfo = AccountOverview(guest.toString());您處理信息以創建組件。

這會生成客人信息的副本(通過調用toString()),以後無法更改。嘗試將guest對象傳遞給您的組件,並在每次重新繪製時執行toString()調用。

通過在編輯完成後調用accountinfo.repaint()可以完成組件的重繪。

+0

非常感謝!我如何將guest對象傳遞給我的組件? – nichi

+0

以某種方式在AccountOverview()方法中創建一個Jcomponent。我會建議創建一個類(擴展Jpanel或任何你使用),它有一個現場客人。比客人改變時:使其重繪/重新填充任何你做的創建組件 – bluevoid

+0

對不起,我對這件事有點新鮮。我會使用ChangeListener來查看guest更改嗎?對不起,所有這些問題,但謝謝:) – nichi