我在表单上放置了两个复选框。如果用户设置check on checkbox1则取消选中checkbox2,反之亦然。
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);当我选中chRISING0并在chFR0上移动鼠标时,出现了奇怪的问题。即使我没有按下chFR0,chRISING0也会取消检查。为什么?我哪里做错了?
发布于 2016-08-04 15:48:44
如果你使用ButtonGroup,这会更容易。详情请参见How to Use the ButtonGroup Component。
发布于 2016-08-04 15:32:53
更新:
我在前面的回答中混淆了两个监听器(我有一段时间没有编写swing代码)。您必须使用ItemListener,因为它负责打开/关闭更改。
chRISING0.addItemListener(new ItemListener() {
public void itemStateChanged(ChangeEvent e) {
chFR0.setSelected(false);
}
});
chFR0.addItemListener(new ItemListener() {
public void itemStateChanged(ChangeEvent e) {
chRISING0.setSelected(false);
}
});已弃用:
chRISING0.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
chFR0.setSelected(false);
}
});您正在使用ItemListener。尝试像使用第二个CheckBox一样使用ChangeListener。
chRISING0.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
chFR0.setSelected(false);
}
});
chFR0.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
chRISING0.setSelected(false);
}
});与ChangeListener不同,ItemListener对组件状态更改(将鼠标悬停在组件上或单击时的状态更改)做出反应。
https://stackoverflow.com/questions/38760909
复制相似问题