单击actionPerformed后禁用源按钮

时间:2014-09-18 04:20:44

标签: java swing jbutton actionlistener

我正在为类的GUI java程序工作,其中网格布局中有10个编号按钮。用户试图猜测每个数字唯一的3位数字。当他们点击一个数字时,相应的数字应该存储为猜测中的一个数字,然后应该禁用该按钮。这是在actionPerformed方法中完成的。

我的问题是如何判断哪个按钮被禁用。

目前我正在尝试成功读取该值并禁用一位数的按钮,我的代码如下所示:

private class NumberListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent click){
        Object source = click.getSource();
        keyTry1 = getButtonNumber(source);
        source.setEnabled(false);  //error
    }

然而,在标记错误的行中,NetBeans抱怨源没有方法setEnabled,可能是因为在方法中它被声明为Object类型。但是,如果我尝试将其声明为JButton,我就不能使用click.getsource();

我知道我可以采用强力方法并拥有一长串if / else语句,或者甚至是另一种根据它代表的数字禁用按钮的方法,但我想知道是否有办法访问源代码一个JButton,因为它显然引用了一个JButton。

1 个答案:

答案 0 :(得分:3)

sourceObject并且没有setEnabled方法,因此编译器允许您进行此类调用是没有意义的。您需要先将source的实例设置为适当的类类型。

假设您可以保证动作的来源是按钮,您可以使用类似......

的内容
((JButton)click.getSource()).setEnabled(false);

如果您无法保证来源是JButton,但可能是某种类型的组件,您甚至可能会使用类似的内容......

((Component)click.getSource()).setEnabled(false);

如果您无法保证,那么您需要进行适当的检查(无论如何都要做)......

Object source = click.getSource();
if (source instanceof JButton) {
    ((JButton)source).setEnabled(false);
}

这个概念是Polymorphism的一个例子,其中Object的一个实例可以像它的父母那样行事