2013-01-03 52 views
2

我有兩個JRadioButton與每個一個ImageIcon。由於我使用的ImageIcons,我需要給出一個按鈕被選中而另一個未被選中的外觀。爲此,我試圖禁用另一個按鈕,該按鈕會自動將ImageIcon更改爲禁用外觀。如何啓用禁用的JRadioButton

問題是,當我點擊禁用的JRadioButton時,沒有任何反應,甚至沒有發現JRadioButton上的ActionListener被調用。

有沒有辦法通過直接點擊啓用禁用的JRadioButton?一旦它被禁用,它的ActionListener不再被調用,所以我不能通過點擊它來啓用它。

基本上我試圖給出的外觀,當一個被選中,另一個沒有被選中,使用ImageIcons。

//Below part of my code how I initialize the buttons 
ButtonGroup codeSearchGroup = new ButtonGroup(); 

searchAllDocs = new JRadioButton(new ImageIcon(img1)); 
searchCurrDoc = new JRadioButton(new ImageIcon(img2)); 

RadioListener myListener = new RadioListener(); 
searchAllDocs.addActionListener(myListener); 
searchCurrDoc.addActionListener(myListener); 

codeSearchGroup.add(searchAllDocs); 
codeSearchGroup.add(searchCurrDoc); 


//Below listener class for buttons 
class RadioListener implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 

     if(e.getSource() == searchAllDocs){ 
      searchAllDocs.setEnabled(true); 
      System.out.println("Search All documents pressed. Disabling current button..."); 
      searchCurrDoc.setEnabled(false); 

     } 
     else{ 
      searchCurrDoc.setEnabled(true); 
      System.out.println("Search Current document pressed. Disabling all button..."); 
      searchAllDocs.setEnabled(false); 
     } 
    } 


} 

在此先感謝。

回答

3

ActionListener不會在禁用模式下啓動,但鼠標事件會。

因此只需添加一個MouseAdapterJRadioButton和覆蓋mouseClicked(..)和覆蓋方法中調用setEnable(true)像這樣:

JRadioButton jrb = new JRadioButton("hello"); 
    jrb.setEnabled(false); 

    jrb.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseClicked(MouseEvent me) { 
      super.mouseClicked(me); 
      JRadioButton jrb = (JRadioButton) me.getSource(); 
      if (!jrb.isEnabled()) {//the JRadioButton is disabled so we should enable it 
       //System.out.println("here"); 
       jrb.setEnabled(true); 
      } 
     } 
    }); 

但我必須說,有在玩了一下不對稱邏輯電路。如果出於某種原因禁用了某些功能,我們不應允許用戶啓用。如果我們這樣做,應該有一個控制系統,我們可以選擇讓按鈕啓用/禁用它,而不會成爲控制系統本身。