onCheckBoxChanged调用问题 麻烦老师解答
Topic sourcepublic record Mediator( // 复选框列表 List<JCheckBox> checkBoxList, // 选中所有按钮 JButton selectAll, // 取消所有按钮 JButton selectNone, // 反选按钮 JButton selectInverse) { public Mediator(List<JCheckBox> checkBoxList, JButton selectAll, JButton selectNone, JButton selectInverse) { // 各个 UI 组件互不引用,这样就减少了组件之间的耦合关系 // Mediator 用于当一个组件发生状态变化时,根据当前所有组件的状态决定更新某些组件 // 如果新增一个 UI 组件,我们只需要修改 Mediator 更新状态的逻辑,现有的其他 UI 组件代码不变 this.checkBoxList = checkBoxList; this.selectAll = selectAll; this.selectNone = selectNone; this.selectInverse = selectInverse; // 为复选框列表添加状态更改监听器 for (JCheckBox checkBox : this.checkBoxList) { checkBox.addActionListener(this::onCheckBoxChanged); } // 为全选按钮添加动作监听器 this.selectAll.addActionListener(this::onSelectAllClicked); // 为取消全部按钮添加动作监听器 this.selectNone.addActionListener(this::onSelectNoneClicked); // 为反选按钮添加动作监听器 this.selectInverse.addActionListener(this::onSelectInverseClicked); } /** * 设置按钮状态 */ public void onCheckBoxChanged(ActionEvent event) { boolean enableCheckAll = false; boolean enableUnCheckAll = false; for (var checkBox : checkBoxList) { if (checkBox.isSelected()) { enableUnCheckAll = true; } else { enableCheckAll = true; } } selectAll.setEnabled(enableCheckAll); selectNone.setEnabled(enableUnCheckAll); } /** * 全选 */ public void onSelectAllClicked(ActionEvent event) { checkBoxList.forEach(checkBox -> checkBox.setSelected(true)); selectAll.setEnabled(false); selectNone.setEnabled(true); } /** * 取消全部 */ public void onSelectNoneClicked(ActionEvent event) { checkBoxList.forEach(checkBox -> checkBox.setSelected(false)); selectAll.setEnabled(true); selectNone.setEnabled(false); } /** * 反选 */ public void onSelectInverseClicked(ActionEvent event) { checkBoxList.forEach(checkBox -> checkBox.setSelected(!checkBox.isSelected())); this.onCheckBoxChanged(null); }}
- 1
里奥08
老师您好 请问下 当只是勾选了checkBoxList中的其中一个checkBox时 为什么会触发了5次onCheckBoxChanged的调用 百思不得其解 求老师能给予解答
public void onCheckBoxChanged(ChangeEvent event) {
System.out.println(event.toString()); //增加了打印语句发现调用了
boolean allChecked = true;
boolean allUnchecked = true;
for (var checkBox : checkBoxList) {
if (checkBox.isSelected()) {
allUnchecked = false;
} else {
allChecked = false;
}
}
selectAll.setEnabled(!allChecked);
selectNone.setEnabled(!allUnchecked);
}
打印结果:
...,selectedIcon=,text=Nugget]]
...,selectedIcon=,text=Nugget]]
...,selectedIcon=,text=Nugget]]
...,selectedIcon=,text=Nugget]]
...,selectedIcon=,text=Nugget]]