在ActionListener中调用setEnable

时间:2014-04-06 02:16:50

标签: java swing jbutton actionlistener

在我用按钮制作的游戏中,当我点击" next"按钮,我会其他一些按钮变成灰色'这样你就无法点击它们。我在ActionListener中为' Next'按钮:

    public class NextListener implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        nextButton.setEnabled(false);
        callButton.setEnabled(false);
        raiseButton.setEnabled(false);
    }
}

然而,当我运行程序时,按钮不会变灰,我收到错误:

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

为什么这不起作用?

1 个答案:

答案 0 :(得分:4)

您正在尝试调用null变量的方法,因此这表明您调用setEnabled(...)的一个或所有JButton变量都为null。解决方案:在尝试调用变量之前,为变量分配有效的引用。

这可以通过构造函数参数或其他方法来完成。或者更好的是,给持有这些按钮变量的类提供一个公共方法,允许您更改其按钮的状态,并将此对象的引用,容器对象传递给ActionListener。

如,

import java.awt.event.ActionListener;
import javax.swing.JButton;

public class MyContainer {
   JButton nextButton = new JButton("Next");
   JButton callButton = new JButton("Call");
   JButton raiseButton = new JButton("Raise");

   private ActionListener nextListener = new NextListener(this);

   public void buttonsSetEnabled(boolean enabled) {
      nextButton.setEnabled(enabled);
      callButton.setEnabled(enabled);
      raiseButton.setEnabled(enabled);
   } 
}

别处

public class NextListener implements ActionListener {
   private MyContainer myContainer;

   public NextListener(MyContainer myContainer) {
      this.myContainer = myContainer;
   }

   public void actionPerformed(java.awt.event.ActionEvent e) {
      myContainer.buttonsSetEnabled(false);
   };
}