如何在javaFX中使checkbox / combobox只读,但不禁用。
我尝试过消费onAction
事件,但它没有用。
checkBox.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
event.consume();
}
});
使用下面代码中的所有事件都有效,但我认为这不是一个好的解决方案:
checkBox.addEventFilter(KeyEvent.ANY, new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
event.consume();
}
});
checkBox.addEventFilter(MouseEvent.ANY, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEventevent) {
event.consume();
}
});
答案 0 :(得分:13)
您可以将复选框设置为已禁用,但使用CSS设置其外观。如果您使用的是默认样式,则可以通过设置完全不透明度使复选框看起来“正常”。
checkbox.setStyle("-fx-opacity: 1");
这可能与组合框类似。
答案 1 :(得分:1)
您可以使用空的方法覆盖方法CheckBox#arm()
:
CheckBox cb = new CheckBox("hi") {
@Override
public void arm() {
// intentionally do nothing
}
};
答案 2 :(得分:0)
如果您不想覆盖CheckBox类,则可以使用所选的Property。
CheckBox cb = new CheckBox("hi");
cb.selectedProperty().addListener(new NCL());
class NCL implements ChangeListener<Boolean> {
@Override
public void changed(ObservableValue<? extends Boolean> ov, Boolean old_val, Boolean new_val) {
cb.setSelected(false);
}
}