我有MenuButton,它扩展了AbstractButton。当我在该类中执行setEnabled(true)时,没有编译器错误,但有NullPointerException的运行时错误。 (请注意,完全相同的代码在扩展JButton时可以正常工作)。相关部分如下。

public class MenuItem extends AbstractButton{
    private String type = "";
    private String text = "";
    private int level;
public MenuItem(String place, String name, int height) {
        type = place;
        text = name;
        level = height;
        setEnabled(true); //This is where the error occurs.
    }
}


错误:

Exception in thread "main" java.lang.NullPointerException
    at javax.swing.AbstractButton.setEnabled(Unknown Source)
    at states.MenuItem.<init>(MenuItem.java:54)
    at states.MainMenu.<init>(MainMenu.java:26)
    at main.TheDarkSeaIslesPlatformer.main(TheDarkSeaIslesPlatformer.java:80)


这不是重复的,因为它已正确初始化。当扩展JButton时,它也可以工作,因此AbstractButton是一个问题。

最佳答案

您需要定义一个按钮模型。这是AbstractButton中的setEnabled方法。

/**
 * Enables (or disables) the button.
 * @param b  true to enable the button, otherwise false
 */
public void setEnabled(boolean b) {
    if (!b && model.isRollover()) {
        model.setRollover(false);
    }
    super.setEnabled(b);
    model.setEnabled(b);
}


最简单的方法是在setEnabled之前的构造函数中进行设置。

    setModel(new DefaultButtonModel());

09-10 20:31