我正在爲社區做一個界面。選項包括「添加人員」,「添加到家人」和「從家人中刪除會員」。我認爲製作多個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();
}
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)(最小完整和可驗證示例)。 –
.. 3)Java GUI可能需要在多種平臺上工作,使用不同的屏幕分辨率和使用不同的PLAF。因此,它們不利於組件的準確放置。要組織強大的GUI組件,請改爲使用佈局管理器或[它們的組合](http://stackoverflow.com/a/5630271/418556),以及[空白區]的佈局填充和邊框(http: //stackoverflow.com/q/17874717/418556)。 –