2015-08-28 97 views
0

我有一些按鈕(JButton),我想禁用「選中」按鈕,所以如果你點擊另一個按鈕,它將變爲禁用狀態,並且所有其他的使能。這幾乎就像ButtonGroup,但不是「選擇/取消選擇」而是「啓用/禁用」。如何啓用/禁用按鈕而不是選擇它? (buttongroup)

我不知道是否已經存在這樣做或什麼是最好的方法。

  • 擴展ButtonGroup並覆蓋所有功能
  • 創建自定義ButtonModelButtonGroup
  • 添加ActionListener(下同)爲每個禁用當前按鈕按鈕,並讓其他人
  • ...

我認爲「擴展ButtonGroup ...」是最好的,但我不確定這是爲什麼我問。

如何使用啓用/禁用來啓用ButtonGroup

如:

第一個按鈕禁用:enter image description here
,當我點擊第二個:enter image description here

注:它將被用於幾次不同的組按鈕

回答

0

保留所有按鈕組中的所需按鈕:

ButtonGroup buttonGroup = new ButtonGroup(); 
buttonGroup.add(jbuttonA); 
buttonGroup.add(jButtonB); 
buttonGroup.add(jButtonC); 

您可以那麼只需使用JButton#isSelected()來檢查是否選擇了替代按鈕,然後(使用ButtonGroup#setSelected(ButtonModel,boolean)選擇您的按鈕組)。

此外,您可以在單擊使用匿名操作偵聽器時進行提示;這需要您將外部組件聲明爲final

如果要禁用JButton,只需使用JButton#setVisible(boolean)就足夠了。

如果您需要進一步解釋,請告訴我。

+0

我不確定要了解您的「替代按鈕」。所有按鈕都必須可見,即使是禁用的按鈕也必須禁用但未選中。如果你點擊'jButtonB',那麼它就變爲禁用狀態,'JButton' A和C使能,....總是隻有一個被禁用。因此,如果我的理解正確,您的解決方案將不會被選中,但它也不會被禁用。 – Duffydake

+0

@Duffydake - 禁用按鈕的目的是什麼?你不能只是將它的可見性設置爲'false'嗎?從你的問題中,你所做的只是點擊圖標(及其顏色)。您可以添加一個標誌來檢查該按鈕是否啓用/禁用,並相應地更改圖標 – Juxhin

+0

@ Juxhin目的並不重要。你不能知道,但我使用LAF,當某些東西被禁用時,它會變成黑色和白色,我不會更改任何圖標,...在問題圖像上,我只是擴展了'ButtonGroup'並用「setEnable」覆蓋所有函數。 – Duffydake

0

也許這個例子可能對我有所幫助。

import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 

public class Example extends JFrame{ 

    private JButton b1 = new JButton("B1"); 
    private JButton b2 = new JButton("B2"); 

    private Listener listener = new Listener(); 

    public static void main(String args[]) { 
     new Example(); 
    } 

    public Example() { 
     setSize(500,500); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setLayout(new FlowLayout()); 

     b1.addActionListener(listener); 
     b2.addActionListener(listener); 

     add(b1); 
     add(b2); 

     setVisible(true); 
    } 

    private class Listener implements ActionListener{ 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      if(e.getSource() == b1) { 
       //Somehow loop through all your JButton group 
       //And change button.setIcon(), etc.. properties.. 
       b1.setEnabled(false); 
       b2.setEnabled(true); 
      } 
      else if(e.getSource() == b2) { 
       b2.setEnabled(false); 
       b1.setEnabled(true); 
      } 

     } 

    } 
} 
+0

我很感謝你的努力,也許我的問題並不清楚,但我不需要我知道的代碼,至少有3種方法可以做到這一點(即使你提出的是最「基本」的),但我是不知道是否有其他東西存在,或者如果我選擇的是好的,有問題的圖片在我的問題中使用第一種方法(擴展了Buttongroup) – Duffydake