动作侦听器中的getSource()方法无法识别我所指的按钮

时间:2014-02-26 05:56:13

标签: java actionlistener

所有,我是Java的新手,我正在研究Java教科书上的实验12,从Java(Ed.5)开始。

在编写构造函数的代码之后,我创建了一个构建面板并向其添加一些单选按钮的方法。我已将这些单选按钮注册到名为RadioButtonListener的Action Listener。然后我为RadioButtonListener写了一个内部类。

这是问题,因为我使用getSource()方法来确定单击了哪个按钮,编译器无法识别我指示的按钮。

这是我的编码:

private void buildBottomPanel()
{
    bottomPanel = new JPanel();

    JRadioButton greenButton = new JRadioButton("Green");

    JRadioButton blueButton = new JRadioButton("Blue");

    JRadioButton cyanButton = new JRadioButton("Cyan");

    ButtonGroup bottomButtonGroup = new ButtonGroup();
    bottomButtonGroup.add(greenButton);
    bottomButtonGroup.add(blueButton);
    bottomButtonGroup.add(cyanButton);

    greenButton.addActionListener(new RadioButtonListener());
    blueButton.addActionListener(new RadioButtonListener());
    cyanButton.addActionListener(new RadioButtonListener());

    bottomPanel.add(greenButton);
    bottomPanel.add(blueButton);
    bottomPanel.add(cyanButton);
}

private class RadioButtonListener implements ActionListener
{
    public void actionPerformed(ActionEvent f)
    {
        if (f.getSource() == greenButton)
        {
            messageLabel.setForeground(Color.GREEN);
        }
        else if (f.getSource() == blueButton)
        {
            messageLabel.setForeground(Color.BLUE); 
        }
        else if (f.getSource() == cyanButton)
        {
            messageLabel.setForeground(Color.CYAN);
        }
    }
}

1 个答案:

答案 0 :(得分:-2)

尝试使用getActionCommand()代替getSource(),如下所示: -

if (f.getActionCommand().equals("green"))
        {
            messageLabel.setForeground(Color.GREEN);
        }

或者您可以使用匿名内部类,如下所示: -

 greenButton.addActionListener(new ActionListener(){ 
            @Override
            public void actionPerformed(ActionEvent e)
            {

              messageLabel.setForeground(Color.GREEN);

            }
        });