首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取消选择JRadioButton

取消选择JRadioButton
EN

Stack Overflow用户
提问于 2012-01-21 21:43:33
回答 2查看 901关注 0票数 0

我正在创建的代码涉及一个JRadioButton和一个JComboBox。如果选择了JComboBox,我希望启用JRadioButton;如果没有选择或取消选择,则禁用它。我的问题是,如果我取消选择JRadioButton,JComboBox将不会被禁用。我该怎么做呢?这是我的代码

代码语言:javascript
复制
    LouisClub=new JComboBox();
    LouisClub.setEnabled(false);

    LouisClub.addItem("Writer");
    LouisClub.addItem("Photojournalist");
    LouisClub.addItem("Cartoonist");
    LouisClub.addItem("Layout Artist");

    Louis=new JRadioButton("The Louisian");

    Louis.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            LouisClub.setEnabled(true);
        }
    });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-21 21:54:02

对于这样的事情,您应该使用JCheckBox而不是JRadioButton,然后您需要在actionPerformed()方法中检查checkBox状态,并基于该启用/禁用comboBox。就像这样

代码语言:javascript
复制
Louis=new JCheckBox();
Louis.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
       LouisClub.setEnabled(((JCheckBox)e.getSource()).isSeleted());
    }
}

此外,使用ChangeListener而不是ActionListener也可能是好的(不确定)。

代码语言:javascript
复制
    Louis.addChangeListener(new ChangeListener() {
        @Override
        public void stateChanged(ChangeEvent ce) {
             LouisClub.setEnabled(((JCheckBox)ce.getSource()).isSeleted());
        }
    });
票数 1
EN

Stack Overflow用户

发布于 2012-01-21 22:14:40

您应该使用ItemListener而不是ActionListener。代码如下:

代码语言:javascript
复制
public class Toto extends JPanel {

    private JComboBox LouisClub;
    private JRadioButton Louis;

    /**
     * Create the panel.
     */
    public Toto() {
        LouisClub = new JComboBox();
        LouisClub.setEnabled(false);

        LouisClub.addItem("Writer");
        LouisClub.addItem("Photojournalist");
        LouisClub.addItem("Cartoonist");
        LouisClub.addItem("Layout Artist");

        Louis = new JRadioButton("The Louisian");

        Louis.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                boolean ok = e.getStateChange()==ItemEvent.SELECTED;
                LouisClub.setEnabled(ok);
            }
        });

        add(Louis);
        add(LouisClub);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setContentPane(new Toto());
        frame.pack();
        frame.setVisible(true);
    }
}

我还有两点意见:

  1. Java开发人员习惯于在其变量的开头不使用大写字母(他们更喜欢louisClub而不是LouisClub)
  2. 我的main方法是有效的,但不是创建窗口的最佳方式(有关更多信息,请参阅java教程)。

再见,

Jean-Marc

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8953450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档