我正在为社区制作界面。选项包括“添加人员”,“添加到家庭”和“从家庭中删除成员”。我认为制作多个JPanels
非常耗时,所以我使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 :(得分:2)
e.getSource()
返回一个对象。您正在尝试将其与字符串进行比较。相反,您可以使用e.getActionCommand()
(假设您没有更改动作命令)
此外,如果您受到限制,请不要将字符串与==
进行比较。使用equals
if ("ADD PERSON".equals(e.getActionCommand()) {}
或者,如果您的按钮范围可在ActionListener
中访问,则可以比较对象
if (e.getSource() == addPersonButton) {}
另一个选项,如果出于任何原因 更改动作命令,您还可以使用按钮的文本进行比较
JButton button = (JButton)e.getSource();
String text = button.getText();
if ("ADD PERSON".equals(text)) {}
SIDE NOTE
CardLayout
来更改视图。您说创建额外的面板非常耗时,但是调试这样的问题可能会更耗时;)请参阅此simple CardLayout example并查看How to use CardLayout 答案 1 :(得分:1)
你应该重新验证你的面板。
使用Jpanel.revalidate()。