【发布时间】:2016-10-26 17:45:53
【问题描述】:
鉴于:
我有一个 javafx.scene.control.CheckBox,我希望允许 3 种状态而不是仅 2 种状态(selected 和 not selected)。
我读到了indeterminate state。
根据 JavaDocs http://docs.oracle.com/javafx/2/api/javafx/scene/control/CheckBox.html#allowIndeterminateProperty
已检查:不确定 == 假,已检查 == 真
未选中:不确定 == false,选中 == false
未定义:不确定 == 真
问题:
我只需要允许从indeterminate 到selected 一次
CheckBox checkbox = new CheckBox("Indeterminate");
checkbox.setAllowIndeterminate(true);
checkbox.setIndeterminate(true);
checkbox.setSelected(false);
checkbox.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
if (checkbox.isIndeterminate()) {
checkbox.setSelected(true);
checkbox.setIndeterminate(false);
checkbox.setAllowIndeterminate(false);
checkbox.setText("Checked");
} else if (checkbox.isSelected()) {
checkbox.setSelected(false);
checkbox.setText("Unchecked");
} else if (!checkbox.isSelected()) {
checkbox.setSelected(true);
checkbox.setText("Checked");
}
}
});
有趣的是,当我第一次点击复选框时,它直接进入else if (checkbox.isSelected())块!!!
问题:
什么???如何?为什么这不起作用?
我需要的是,如果它最初是不确定的,那么在第一次点击时,它应该被选中。并继续点击更多:选中 -> 未选中,未选中 -> 选中,...
否则,如果它最初不是不确定的(即选择或未选择),那么它应该表现正常:选中 -> 未选中,未选中 -> 选中,...
【问题讨论】:
标签: java checkbox javafx eventhandler