4

我有一个名为 ImageButton 的自定义按钮类,它扩展了 JButton。在其中我有一个我想要调用的 setEnabled 方法,而不是 JButton 的 setEnabled 方法。

我的代码如下。在我的另一个类中,我创建了一个 ImageButton 的新实例,但是当我尝试使用 setEnabled 方法时,它直接转到 JButton 的 setEnabled 方法。甚至在我运行代码之前,我的 IDE 就告诉我从未使用过 ImageButton 的 setEnabled 方法。如果我将方法更改为“SetOn”,它工作正常。那么为什么我不能使用与超类相同的名称呢?我认为如果它是同名的,它应该隐藏超类方法?

public class ImageButton extends JButton{

    public ImageButton(ImageIcon icon){
        setSize(icon.getImage().getWidth(null),icon.getImage().getHeight(null));
        setIcon(icon);
        setMargin(new Insets(0,0,0,0));
        setIconTextGap(0);
        setBorderPainted(true);
        setBackground(Color.black);
        setText(null);
    }

    public void setEnabled(Boolean b){
        if (b){
            setBackground(Color.black);
        } else {
            setBackground(Color.gray);
        }
        super.setEnabled(b);
    }
}
4

2 回答 2

8

你需要改变

public void setEnabled(Boolean b){

public void setEnabled(boolean b){
                       ^

(通过使用Boolean而不是boolean重载方法而不是覆盖它。)


我鼓励您始终注释旨在覆盖另一个方法的方法@Override。如果你在这种情况下这样做了,编译器会抱怨并说类似

setEnabled(Boolean)类型的方法ImageButton必须覆盖或实现超类型方法。

于 2011-06-07T18:19:20.793 回答
2

Boolean 中不带大写字母试试:Boolean 和 boolean 是有区别的,所以签名是不同的:

public void setEnabled(boolean b)

带有大写字母的布尔值是一个类。boolean 是语言的原始类型。(对于 int 与 Integer、double 与 Double 等也是如此)

于 2011-06-07T18:21:14.153 回答