2016-11-25 31 views
0

我正在嘗試在java swing中創建一個gui,讓用戶使用切換按鈕預訂座位。我最初使用默認的按鈕顏色來測試點擊事件是否起作用。該按鈕應變成紅色以表示其已被預訂並變爲黃色以表示其未被預訂。java swing中的JToggleButton無法識別isSelected()方法?

這裏是我的actionPerformed方法

@Override 
public void actionPerformed(ActionEvent e) { 
    GoldSeat seat = (GoldSeat)e.getSource(); 
    if(seat.isSelected()){ 
     seat.setBackground(Color.red); 
    } 
    else 
    { 
     seat.setBackground(Color.yellow); 
    } 
} 

GoldSeat只是一個派生類JToggleButton中的。出於某種原因,當我單擊按鈕時,它不會變成紅色(它變成默認的灰色),但是當我再次單擊它時,它會變成黃色。所以看起來按鈕的「真實」或「開啓」狀態不起作用,但是「錯誤」是。我不知道爲什麼isSelected()不能正常工作。

任何想法如何解決這個問題?

編輯:我扔一起快速的JFrame一個JToggleButton中就可以使用簡單的拖放生成此代碼的NetBeans接口:

jToggleButton1 = new javax.swing.JToggleButton(); 
jToggleButton1.setText("jToggleButton1"); 
    jToggleButton1.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      jToggleButton1ActionPerformed(evt); 
     } 
    }); 

和動作事件:

private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {            
    if(jToggleButton1.isSelected()){ 
     jToggleButton1.setBackground(Color.red); 
    }else { 
     jToggleButton1.setBackground(Color.yellow); 
    } 
} 

這會執行我想要發生的事情,但是我無法使用上面發佈的派生類重新創建它。我用自己的代碼做錯了什麼?

+0

'我做我自己的一些錯誤代碼?' - 也許沒有錯,但不同。我已經建議這是一個LAF問題。也許這兩個幀使用不同的LAF?無論如何,我們都不能根據幾行隨機代碼來判斷你做錯了什麼。 – camickr

回答

2

LAF在選擇切換按鈕時進行自定義繪畫,因此設置背景不起作用。

您可能可以使用UIManager來控制此行爲。在創建任何切換按鈕之前,你可以嘗試:

UIManager.put("ToggleButton.select", Color.RED); 

這將改變所有切換按鈕的屬性。

編輯:

如果你只想要這個功能對於一個切換按鈕,你可以嘗試(不知道是否會工作)是這樣的:

Color select = UIManager.getColor("ToggleButton.select"); 
UIManager.put("ToggleButton.select", Color.RED); 
JToggleButton button = new JToggleButton(...); 
UIManager.put("ToggleButton.select", select); 
+0

我真的需要它在單個按鈕上工作。我製作了一個帶有一個JToggleButton的快速JFrame,並設法讓它按照我的需要工作,但由於某種原因,它不適用於我的主代碼。編輯:剛纔看到你的編輯。我會嘗試一下,看看它是如何發展的 –

+0

@ MarkO'Hare,請參閱編輯。如果你有更多的問題,然後張貼你的[mcve]顯示你的嘗試。 – camickr

+0

該解決方案最終爲我工作!謝謝你的幫助! –