3

それぞれに ImageIcon を持つ 2 つの JRadioButton があります。私が使用している ImageIcons のために、1 つのボタンが選択され、もう 1 つのボタンが選択されていないという外観を与える必要があります。これを行うには、ImageIcon を無効な外観に自動的に変更する他のボタンを無効にしようとしています。

問題は、無効になっている JRadioButton をクリックしても何も起こらず、JRadioButton の ActionListener が呼び出されないことです。

無効になっている JRadioButton を直接クリックして有効にする方法はありますか? 無効にすると、ActionListener が呼び出されなくなるため、クリックして有効にすることはできません。

基本的に、ImageIcons を使用して、一方が選択されているときにもう一方が選択されていないという外観を与えようとしています。

//Below part of my code how I initialize the buttons
ButtonGroup codeSearchGroup = new ButtonGroup();

searchAllDocs = new JRadioButton(new ImageIcon(img1));
searchCurrDoc = new JRadioButton(new ImageIcon(img2));

RadioListener myListener = new RadioListener();
searchAllDocs.addActionListener(myListener);
searchCurrDoc.addActionListener(myListener);

codeSearchGroup.add(searchAllDocs);
codeSearchGroup.add(searchCurrDoc);


//Below listener class for buttons
class RadioListener implements ActionListener {  
    public void actionPerformed(ActionEvent e) {

        if(e.getSource() == searchAllDocs){
            searchAllDocs.setEnabled(true);
            System.out.println("Search All documents pressed. Disabling current button...");
            searchCurrDoc.setEnabled(false);

        } 
        else{
            searchCurrDoc.setEnabled(true);
            System.out.println("Search Current document pressed. Disabling all button...");
            searchAllDocs.setEnabled(false);
        }
    }


}

前もって感謝します。

4

1 に答える 1

4

ActionListener無効モードでは起動しませんが、マウスイベントは起動します。

したがって、次のように、オーバーライドされたメソッド内でtoを追加MouseAdapterJRadioButton、オーバーライドmouseClicked(..)して呼び出します。setEnable(true)

    JRadioButton jrb = new JRadioButton("hello");
    jrb.setEnabled(false);

    jrb.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent me) {
            super.mouseClicked(me);
            JRadioButton jrb = (JRadioButton) me.getSource();
            if (!jrb.isEnabled()) {//the JRadioButton is disabled so we should enable it
                //System.out.println("here");
                jrb.setEnabled(true);
            }
        }
    });

私は、少し歪んだ論理が働いていると言わなければなりませんが。何かが無効になっている場合、それは何らかの理由で無効になっているため、ユーザーが有効にできるようにするべきではありません。そして、そうする場合、ボタンを有効/無効にすることを選択できる制御システムがあるはずですが、それは制御システム自体にはなりません。

于 2013-01-03T19:34:36.687 に答える