我有两个带有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);
}
}
}
提前致谢。
答案 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);
}
}
});
虽然我必须说在游戏中存在一些偏斜的逻辑。如果某些东西被禁用,那么这样做是有原因的,因此我们不应该允许用户启用。如果我们这样做,应该有一个控制系统,我们可以选择启用/禁用按钮,它不会成为控制系统本身。