我有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());