如何使用另一个JButton关闭JButton

时间:2014-04-10 14:33:37

标签: java swing user-interface

我想通过告知您这是我第一次发布这篇文章的前言,所以如果有任何错误,请告诉我。

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

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

final JButton name = new JButton("");

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

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)

2 个答案:

答案 0 :(得分:2)

您需要将一个ActionListener实例(所以StandListener的一个实例)添加到支架JButton。

类似于:

myStandButton.addActionListener(new StandListener());

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

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

更容易。

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

答案 1 :(得分:1)

试试这个:

import javax.swing.*;
import java.awt.event.*;

class MyGui1 extends JFrame implements ActionListener {
JButton b1,b2;
public MyGui1()
{
setVisible(true);
setSize(1000,1000);
setLayout(null);
b1=new JButton("Enable");
b1.setBounds(10,10,100,100);
add(b1);
b2=new JButton("on");
b2.setBounds(110,110,100,100);
add(b2);
add(b1);
b1.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
    if(e.getSource()==b1)
    {
    b2.setEnabled(false);
    b2.setText("off");
      }
    }
     public static void main (String[] args) {
     MyGui1 m=new MyGui1();
   }
 }