问题
I have two checkboxes placed on form. If user set check on checkbox1 than uncheck checkbox2 and vice versa.
chRISING0 = new JCheckBox("RISING");
chRISING0.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
chFR0.setSelected(false);
}
});
chRISING0.setFont(new Font("Tahoma", Font.PLAIN, 9));
chRISING0.setBounds(42, 15, 84, 23);
pnlOUT1.add(chRISING0);
chFR0 = new JCheckBox(fpp.loadLanguage("chFR0"));
chFR0.setFont(new Font("Tahoma", Font.PLAIN, 9));
chFR0.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
chRISING0.setSelected(false);
}
});
chFR0.setBounds(42, 35, 67, 23);
pnlOUT1.add(chFR0);
Strange problem happens when I check chRISING0 and move mouse on chFR0. Than chRISING0 unchecks even I didn't press on chFR0. Why? What I'm doing wrong?
回答1:
It would be easier if you used a ButtonGroup. See How to Use the ButtonGroup Component for details.
回答2:
UPDATE:
I confused two listeners in my previous answer (I didn't code the swing for a while). You must use ItemListener because it is responsible for an on/off changes.
chRISING0.addItemListener(new ItemListener() {
public void itemStateChanged(ChangeEvent e) {
chFR0.setSelected(false);
}
});
chFR0.addItemListener(new ItemListener() {
public void itemStateChanged(ChangeEvent e) {
chRISING0.setSelected(false);
}
});
DEPRECATED:
chRISING0.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
chFR0.setSelected(false);
}
});
You're using ItemListener. Try using ChangeListener as you did with second CheckBox.
chRISING0.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
chFR0.setSelected(false);
}
});
chFR0.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
chRISING0.setSelected(false);
}
});
ItemListener reacts to a components state change (state changes when you hover a mouse over the component or click on it) unlike ChangeListener.
来源:https://stackoverflow.com/questions/38760909/check-jcheckbox1-uncheck-jcheckbox2