如何启用禁用的JRadioButton

时间:2013-01-03 19:20:12

标签: java swing jradiobutton

我有两个带有ImageIcon的JRadioButton。由于我使用的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);
        }
    }


}

提前致谢。

1 个答案:

答案 0 :(得分:3)

ActionListener不会在禁用模式下启动,但鼠标事件将会启动。

因此,只需将MouseAdapter添加到JRadioButton并覆盖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);
            }
        }
    });

虽然我必须说在游戏中存在一些偏斜的逻辑。如果某些东西被禁用,那么这样做是有原因的,因此我们不应该允许用户启用。如果我们这样做,应该有一个控制系统,我们可以选择启用/禁用按钮,它不会成为控制系统本身。