如何在JavaFX中使用checkbox或combobox readonly

时间:2013-03-26 05:07:46

标签: javafx-2 readonly

如何在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();
    }
});

3 个答案:

答案 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);
        }
    }