如何启用/禁用按钮而不是选择它? (ButtonGroup中)

时间:2015-08-28 15:06:26

标签: java swing buttongroup

我有一些按钮(JButton),我想要禁用“已选择”的按钮,所以如果你点击另一个按钮,它将变为禁用,所有其他按钮启用。它几乎就像ButtonGroup,而不是“选择/取消选择”它是“启用/禁用”。

我不知道是否存在某些事情或者最佳方法是什么。

  • 扩展ButtonGroup并覆盖所有功能
  • 创建自定义ButtonModelButtonGroup
  • 为每个禁用当前按钮并启用其他按钮的按钮添加ActionListener(相同)
  • ...

我认为“扩展ButtonGroup ...”是最好的,但我不确定这是我问的原因。

如何使用启用/禁用ButtonGroup

例如:

第一个按钮禁用:enter image description here
当我点击第二个时:enter image description here

nb:对于不同的按钮组,它会被多次使用

2 个答案:

答案 0 :(得分:0)

将所有需要的按钮保留在按钮组中:

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

然后,您可以使用JButton#isSelected()检查是否选择了替代按钮,然后使用ButtonGroup#setSelected(ButtonModel,boolean)(de)选择按钮组。

此外,您可以在单击使用匿名动作侦听器时提示它;这要求您将外部组件声明为final

如果您要停用JButton,只需使用JButton#setVisible(boolean)即可。

如果您需要进一步解释,请告诉我。

答案 1 :(得分: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);
            }

        }

    }
}