2014-04-10 73 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