java - 如何使用另一个 JButton 关闭一个 JButton

标签 java swing user-interface

我想在这篇文章的序言中告诉大家,这是我第一次发帖,所以如果有任何错误,请告诉我。

我正在尝试为我的高中计算机数学(编程)课编写一款二十一点游戏,但出现了很多错误,但真正令人烦恼的是这个错误。

我的 GUI 有 2 个 JButton,一个击打按钮“Hit Me”和一个站立按钮“Stand”。 Hit Me 使用 Math.random 为玩家提供一张牌,并跟踪以查看他们是否破产。当玩家点击“Stand”按钮时,需要禁用“Hit Me”按钮。我在这个网站上搜索了答案,得到的答案是使用 setEnabled 方法并将其设置为 HitMe.setEnabled(false)。我还发现有人说 JButtons 需要设置为 Final,这样:

最终 JButton 名称 = new JButton("");

因此,我将 JButtons 设置为 Final,并在 ActionListeners 的代码中插入 setEnabled 方法

private class StandListener implements ActionListener
{
   public void actionPerformed(ActionEvent e)
   {
      HitMe.setEnabled(false);      
   }
}

final JButton HitMe = new JButton("Hit Me");

set.Enabled(false) 在 ActionListener 代码中不起作用。 “最终”标识符也不起作用。我真的需要这方面的帮助,所以尽快提供任何帮助将不胜感激。

稍后我会发布更多问题。 :)

2014 年 4 月 17 日编辑:

我写这篇文章是因为我刚刚意识到,如果有人查看此页面,他们可能能够诊断我遇到的错误。我正在使用 jGrasp 进行 java 编码,如果这对您的答案有影响的话。

错误如下:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at PlayerBoxClubs$StandListener.actionPerformed(PlayerBoxClubs.java:105)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

最佳答案

您需要将 ActionListener 的实例(即 StandListener 的实例)添加到立场 JButton。

所以类似:

myStandButton.addActionListener(new StandListener());

您也可以添加一个新的匿名类实例作为 ActionListener,例如:

myStandButton.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e)
    {
        HitMe.setEnabled(false);
    }
});

比较容易。

人们可能已经向您提到将 JButton 设为最终的,因为他们可能假设您将使用匿名类,其中您只能引用匿名类中的其他对象(如果它们是最终的)。

关于java - 如何使用另一个 JButton 关闭一个 JButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22991128/

相关文章:

java - 在 Android Stud 的 Java 中使表行可滚动

java - KeyListener 没有被调用

java - Servlet 在启动时使用计时器类在固定时间间隔后触发事件?

java - 类不是抽象的,不会重写 KeyListener 中的抽象方法 keyReleased(KeyEvent)

java - 如何知道用户何时真正释放了Java中的 key ?

java - Java GUI 在所有操作系统上的显示都一样吗?

html - 垂直并排放置导航 block

python - 导入错误 : No module named _imagingtk

java - Jetty 9 - 如何使用 Jetty 9 设置 "request content"和 "request headers"?

java - 我怎样才能给这个密码字段焦点?