- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定:
我有一个javafx.scene.control.CheckBox
我希望允许 3 种状态,而不是仅 2 种( selected
和 not selected
)。
我读到了indeterminate
状态。
根据 JavaDocs http://docs.oracle.com/javafx/2/api/javafx/scene/control/CheckBox.html#allowIndeterminateProperty
checked: indeterminate == false, checked == true
unchecked: indeterminate == false, checked == false
undefined: indeterminate == true
问题:
我需要允许 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())
阻止!!!
问题:
什么???!如何?为什么这不起作用?
我需要的是,如果它最初是不确定的,那么在第一次单击时,它应该被选中。并继续点击更多:选中 -> 未选中,未选中 -> 选中,...
否则,如果它最初不是不确定的(即选择或未选择),那么它应该表现正常:选中 -> 未选中,未选中 -> 选中,...
最佳答案
当您设置allowIndeterminateProperty时为 true,您实际做的是允许 CheckBox
循环所有三种状态:
Determines whether the user toggling the CheckBox should cycle through all three states: checked, unchecked, and undefined. If true then all three states will be cycled through; if false then only checked and unchecked will be cycled.
在您的情况下,它应该设置为 false,因为您希望它只是在选中和未选中之间循环。
那么如果你设置indeterminateProperty 最初无论是 true 还是 false,CheckBox
都会循环选中和未选中状态。
您的 CheckBox
进入 isSelected 分支的原因是引用中定义的循环: checked -> unchecked -> undefined ->Checked -> 。 ..。由于 checkbox.setIndependent(true);
,您的 CheckBox
处于未定义状态,并且下一个状态已选中。
示例
这个CheckBox
最初是未定义,然后它循环选中和未选中。
CheckBox checkBox = new CheckBox();
checkBox.indeterminateProperty().set(true);
checkBox.setAllowIndeterminate(false);
checkBox.selectedProperty().addListener((obs, oldVal, newVal) -> {
if(newVal)
System.out.println("Checked");
else
System.out.println("Unchecked");
});
关于JavaFX 三态复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38007754/
我是一名优秀的程序员,十分优秀!