4

如何在 javaFX 中使复选框/组合框只读但未禁用。

我尝试消费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();
    }
});
4

3 回答 3

16

您可以将复选框设置为禁用,但使用 CSS 设置其外观。如果您使用默认样式,您可以通过设置完全不透明度使复选框看起来“正常”。

checkbox.setStyle("-fx-opacity: 1");

这可能是与组合框类似的处理。

于 2013-04-01T19:13:53.763 回答
2

CheckBox#arm()您可以用空的方法覆盖方法:

    CheckBox cb = new CheckBox("hi") {
        @Override
        public void arm() {
            // intentionally do nothing
        }
    };
于 2013-03-28T12:48:47.080 回答
0

如果不想覆盖 CheckBok 类,可以使用 selectedProperty。

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);
        }
    }
于 2013-03-28T19:06:39.667 回答