我正在为社区做一个界面。选项包括“添加人员”,“添加到家人”和“从家人中删除会员”。我认为制作多个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)。 –