2015-08-28 51 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