0

我正在创建的代码涉及一个 JRadioButton 和一个 JComboBox。如果选择了 JRadioButton,我希望启用 JComboBox,如果未选择或取消选择,则禁用它。我的问题是如果我取消选择 JRadioButton,JComboBox 将不会被禁用。我怎样才能做到这一点?这是我的代码

    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);
        }
    });
4

2 回答 2

1

对于此类事情,您应该使用 JCheckBox 而不是 JRadioButton,然后您需要在 actionPerformed() 方法中检查复选框状态,并基于该启用/禁用组合框。就像是

Louis=new JCheckBox();
Louis.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
       LouisClub.setEnabled(((JCheckBox)e.getSource()).isSeleted());
    }
}

使用 ChangeListener 而不是 ActionListener 也可能很好(不确定)。

    Louis.addChangeListener(new ChangeListener() {
        @Override
        public void stateChanged(ChangeEvent ce) {
             LouisClub.setEnabled(((JCheckBox)ce.getSource()).isSeleted());
        }
    });
于 2012-01-21T13:54:02.360 回答
1

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

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. 我的主要方法有效,但不是创建窗口的最佳方法(有关更多信息,请参阅 java 教程)。

再见,

让-马克

于 2012-01-21T14:14:40.363 回答