2014-04-10 70 views
0

我只想通过通知您这是我第一次发布这篇文章的前言,因此如果有任何错误,请告诉我。如何使用另一个JButton关闭JButton

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

我的图形用户界面有两个JButtons,一个打我按钮,“打我”,一个站立按钮,“站”。击中我使用Math.random给玩家一张卡,并跟踪看看他们是否破产。当玩家点击它时,Stand按钮需要禁用Hit Me按钮。我搜索了这个网站的答案,我得到的是使用setEnabled方法并将其设置为HitMe.setEnabled(false)。我还发现,人谁说这些Jbutton需要设置最终使得:

final JButton name = new JButton("");

所以,我设置了Jbutton将最终并插入了的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) 
+0

你确定你的程序通过在'actionPerformed'?如果不是,你可能没有将'actionPerformed'链接到你的'JButton' –

+0

为了尽快得到更好的帮助,请发布[MCVE](http://stackoverflow.com/help/mcve)(最小完整和可验证示例)。 –

+0

@CladClad,你是什么意思,“你确定你的程序通过了actionPerformed”?我确实链接了JButton和actionPerformed。 – Ungeheuer

回答

2

你需要你的ActionListener(所以StandListener的实例)的添加实例到支架的JButton。

因此,像:

myStandButton.addActionListener(new StandListener()); 

你也可以只添加一个新的匿名类实例作为一个ActionListener太像:

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

类更容易。

人们可能已经提到你做出JButton最后的决定,因为他们可能认为你要使用一个匿名类,如果它们是最终的,你只能在匿名类中引用其他对象。

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(); 
    } 
} 
+0

对于你的JButton,括号中的数字是什么意思?我们在课堂上完成了Java Swing的东西,但我从来没有见过。 – Ungeheuer