2014-04-01 63 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

相关问题