2013-02-14 24 views
1

我需要一個按鈕,當按下這個按鈕時,將啓用所有其他按鈕,並將標籤的名稱從「Off」更改爲「On」,再次按下時,禁用所有按鈕並將開關置於「off」再次回來,就像一個開/關開關。事情是,我可以「打開」,但我無法將其關閉。如何在java上打開/關閉按鈕?

+3

這是一個Swing GUI? Android的? AWT?一個網絡程序?什麼?如果您試圖實現這一點,並且您的代碼不起作用,您可以考慮向我們展示您的代碼嘗試。 – 2013-02-14 02:47:07

+1

我敢打賭,這是Swing,因爲他/她用'JButton'標記了這個問題。 – 2013-02-14 02:48:26

+0

是的,這是擺動,對於延遲抱歉,我的互聯網糟透了!我會試試這個!謝謝!! – 2013-02-14 02:53:35

回答

5

如果擺動,那麼也許你會想要把你想要控制的按鈕放入一個數組或ArrayList<AbstractButton>。這樣,控制按鈕的ActionListener可以簡單地遍歷數組或帶有for循環的集合,調用按鈕上的setEnabled(true)或false。考慮使控制按鈕成爲JCheckBox或JToggleButton。

請注意,如果您使用JToggleButton,則向其添加ItemListener。如果你這樣做,就不需要使用布爾值。只需檢查傳遞給ItemListener的itemStateChanged方法的ItemEvent的狀態。如果getStateChanged()返回ItemEvent.SELECTED,則遍歷您的JButton集合啓用所有按鈕。如果它返回ItemEvent.DESELECTED,則做相反的操作。

另請注意,每拜倫霍金斯的評論:

你可能要考慮的是,當用戶切換的按鈕ItemListener將接收事件當按鈕被編程切換,而還。 ActionListener只會觸發來自人類用戶的輸入。我經常有錯誤,因爲我選錯了。

+0

也考慮'JToggelButton'的ButtonGroup,見[這裏](http://stackoverflow.com/a/6036048/230513)。 – trashgod 2013-02-14 11:16:20

+1

您可能想要考慮當按鈕被_programmatically_切換時以及_user_切換按鈕時'ItemListener'將接收事件。 ActionListener只會觸發來自人類用戶的輸入。我經常有錯誤,因爲我選錯了。 – 2013-02-14 21:11:23

+0

@ByronHawkins:非常好的一點,謝謝!如果你不介意的話,我會在答案中加上這個。 – 2013-02-14 21:35:17

1

如果你的按鈕被按下,也不會重新彈出,機會是你已經在JToggleButton覆蓋的方法,而無需調用super的版本的它。而不是覆蓋方法,創建一個ActionListener並使用addActionListener()附加到按鈕。當您的聽衆收到按鈕操作的通知時,請檢查切換按鈕是否處於啓動或關閉狀態,並相應地檢查其他按鈕上的setEnabled()

0

嘗試使用這個簡單的代碼,使用變量作爲標誌

public int status = 0; //0 = on, 1=off 

public void button_clicked() 
{ 
    //on button clicked 
    if(status == 0) 
    { 
     //logic here 
     status = 1; 
     buttonname.setText("Off"); 
    } 
    //off button clicked 
    else if(status == 1) 
    { 
     //logic here 
     status = 0; 
     buttonname.setText("On"); 
    } 
} 
+0

如果你只有兩種狀態,爲什麼不使用布爾值?它會使代碼,如果(上){...}其他{...} – n00begon 2013-02-14 02:57:57

+0

是的,你可以。 這只是我的代碼風格。你可以修改它,無論如何你想:) – goravine 2013-02-14 02:59:07

+0

感謝幫助的人!我已經解決了!謝謝!! – 2013-02-14 03:06:50

1

你需要一個布爾值來表示按鈕的狀態。

換句話說,當您的按鈕關閉(您的布爾變量爲false)時,您的onClick監聽器將調用方法「turnButtonOn()」或其他類型的方法。

如果你的布爾變量是真實的,那麼你會調用一個方法turnButtonOff()

public void onClick() { 
    if(buttonOn){ 
     turnOff(); 
    } 
    else { 
     turnOn(); 
    } 
    buttonOn = !buttonOn; 
} 
相關問題