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

このような場合は、JRadioButton の代わりに JCheckBox を使用する必要があります。次に、actionPerformed() メソッドで checkBox のステータスをチェックし、その有効化/無効化のコンボボックスに基づいてチェックする必要があります。何かのようなもの

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

また、ActionListener の代わりに ChangeListener を使用することも (確かではありませんが) 良いかもしれません。

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

ActionListener の代わりに ItemListener を使用する必要があります。コードは次のとおりです。

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

あと 2 つのコメントがあります。

  1. Java 開発者は、変数の先頭に大文字を使用していません (彼らは LouisClub よりも louisClub を好みます)。
  2. 私の主な方法は機能していますが、ウィンドウを作成する最良の方法ではありません (詳細については、Java チュートリアルを参照してください)。

さよなら、

ジャンマルク

于 2012-01-21T14:14:40.363 に答える