JButton上的ActionListener不执行任何操作

时间:2014-02-12 21:04:24

标签: java swing jbutton actionlistener

我的Actionlistener有一个小问题,当我点击按钮没有任何反应?我没有看到问题所在,所以另一双眼睛可以帮助我:)

 public class GameOptions extends JPanel implements ActionListener{ 
    public GameOptions(){
        System.out.println("GameOptions Class test blabla");

        easyButton().addActionListener(this);
        mediumButton().addActionListener(this);
        hardButton().addActionListener(this);

        JPanel center = new JPanel(new GridLayout(4,1,10,10));
        center.add(new JLabel("Chose Difficulty Level"));
        center.add(easyButton());
        center.add(mediumButton());
        center.add(hardButton());

        this.add(center, BorderLayout.CENTER);
        this.setPreferredSize(this.getPreferredSize()); 
        this.setFocusable(true);
        this.requestFocusInWindow();
    }
    private JButton easyButton(){
        JButton levelEasy = new JButton("Easy");
        return levelEasy;
    }
    private JButton mediumButton(){
        JButton levelMedium = new JButton("Medium");
        return levelMedium;
    }
    private JButton hardButton(){
        JButton levelHard = new JButton("Hard");
        return levelHard;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        Object src = e.getSource();
        if(src == easyButton()){
            System.out.println("Easy");
        }
        else if(src == mediumButton()){
            System.out.println("Medium");
        }
        else if(src == hardButton()){
            System.out.println("Hard");
        }
        else{

        }
      }
    }

2 个答案:

答案 0 :(得分:8)

您的xxxButton()方法每次都会创建新的JButton,因此您将ActionListener添加到新创建的JButton中,然后丢弃该按钮,然后添加一个完全不同的JButton,一个没有ActionListener的GUI。< / p>

建议:创建JButtons,为它们设置变量,添加ActionListener,并将相同的按钮添加到GUI。

所以不要这样:

easyButton().addActionListener(this);  // creates one JButton

center.add(easyButton());   // creates a completey different JButton

这样做:

JButton easyButton = easyButton();
easyButton.addActionListener(this);

center.add(easyButton);

注意,如果这是我的代码,我不确定我是否会使用JButton。相反,或许我可以使用JRadioButtons或JComboBox。

答案 1 :(得分:3)

您正在使用函数创建每个JButton。稍后您尝试添加center.add(easyButton());,但添加ActionListener的按钮与此按钮不同。您使用new创建每个,因此引用不一样。

你应该这样做:

JButton buttonEasy = easyButton();
buttonEasy.addActionListener(this);
center.add(buttonEasy);