3

我有两个 JRadioButton,每个都有 ImageIcon。由于我正在使用 ImageIcons,我需要给出一个按钮被选中而另一个按钮未被选中的外观。为此,我尝试禁用另一个按钮,该按钮会自动将 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在禁用模式下不会触发,但鼠标事件会。

因此,只需添加一个MouseAdaptertoJRadioButton并覆盖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 回答