2014-04-01 65 views
0

我正在爲社區做一個界面。選項包括「添加人員」,「添加到家人」和「從家人中刪除會員」。我認爲製作多個JPanels非常耗時,所以我使得JPanel取決於用戶的「選擇」。例如,如何根據以前選擇的JButton更改JPanel的內容?

if(choice == 1) 
{ 
     addPTitle = new JLabel("ADD PERSON"); 
     addPTitle.setHorizontalAlignment(SwingConstants.CENTER); 
     addPTitle.setBounds(75,20,350,50); 
     addPTitle.setFont(calibri); 
     addPTitle.setForeground(red); 
    } 
    else if(choice == 2) 
    { 
     addPTitle = new JLabel("ADD TO FAMILY"); 
     addPTitle.setHorizontalAlignment(SwingConstants.CENTER); 
     addPTitle.setBounds(75,20,350,50); 
     addPTitle.setFont(calibri); 
     addPTitle.setForeground(red); 
    } 
    else if(choice == 3) 
    { 
     addPTitle = new JLabel("REMOVE MEMBER"); 
     addPTitle.setHorizontalAlignment(SwingConstants.CENTER); 
     addPTitle.setBounds(75,20,350,50); 
     addPTitle.setFont(calibri); 
     addPTitle.setForeground(red); 
    } 

當我手動更改選擇的價值,但是當我嘗試添加該按鈕的ActionListener自己,選擇的價值並沒有改變,而只是展示了該JPanel的內容,它工作正常仍然基於我手動設置的值。這裏是我的代碼爲ActionListener

private class ButtonHandler implements ActionListener{ 
    public void actionPerformed(ActionEvent e) { 
     if(e.getSource() == "ADD PERSON") 
     { 
      choice = 1; 
      frame.setContentPane(addP); 
      frame.invalidate(); 
      frame.validate(); 
     } 
     else if(e.getSource() == "ADD TO FAMILY"){ 
      choice = 2; 
      frame.setContentPane(addP); 
      frame.invalidate(); 
      frame.validate(); 
     } 
     else if(e.getSource() == "REMOVE MEMBER FROM FAMILY"){ 
      choice = 3; 
      frame.setContentPane(addP); 
      frame.invalidate(); 
      frame.validate(); 
     } 
+0

1)對於許多組件在一個空間中,使用['CardLayout']( http://docs.oracle.com/javase/7/docs/api/java/awt/CardLayout.html)在這[簡短示例](http://stackoverflow.com/a/5786005/418556)中可見。 2)爲了更快地獲得更好的幫助,請發佈[MCVE](http://stackoverflow.com/help/mcve)(最小完整和可驗證示例)。 –

+0

.. 3)Java GUI可能需要在多種平臺上工作,使用不同的屏幕分辨率和使用不同的PLAF。因此,它們不利於組件的準確放置。要組織強大的GUI組件,請改爲使用佈局管理器或[它們的組合](http://stackoverflow.com/a/5630271/418556),以及[空白區]的佈局填充和邊框(http: //stackoverflow.com/q/17874717/418556)。 –

回答

2

e.getSource()返回一個對象。您正試圖將其與字符串進行比較。相反,您可以使用e.getActionCommand()(假設您沒有更改動作命令)

另外,如果您感覺不適,請勿將字符串與==進行比較。使用equals

if ("ADD PERSON".equals(e.getActionCommand()) {} 

或者,如果你的按鈕範圍是在ActionListener你可以比較的對象accessble,

if (e.getSource() == addPersonButton) {} 

另一種選擇,如果您有任何理由變化的行動命令,您可以還可以使用按鈕的文字進行比較

JButton button = (JButton)e.getSource(); 
String text = button.getText(); 
if ("ADD PERSON".equals(text)) {} 

邊注

+0

選擇的值現在改變,但JPanel不顯示受選擇值影響的內容。我嘗試使用revalidate(),但它沒有工作。或者,也許我應該把它放在別的地方? – 2562166

+0

很難說。你的代碼真的不怎麼說。 –

+0

嘗試'revalidate();重繪();' –

1

你應該重新驗證你的面板。

使用Jpanel.revalidate()。

+0

面板的更換是可以的。我的問題是選擇的價值不會改變。我嘗試將選項設置爲0.選擇全部三個選項後,該值仍然爲0. – 2562166

+0

按鈕偵聽器設置選擇= 0後沒問題;並請將字符串與.equals()函數進行比較 –

+0

我應該在ActionListener中放置重新驗證嗎?我試着把它放在那裏,但沒有顯示依賴於選擇值的內容。 – 2562166

相關問題