当comboBox获得焦点时,JavaFX comboBox不选择所有文本

时间:2016-06-14 15:50:02

标签: java combobox focus javafx-8

我正在编写一个使用一些可编辑ComboBox控件的javaFx应用程序。我希望当这样的ComboBox获得焦点时,ComboBox中的文本会突出显示。所以我在下面有这个代码:

@FXML
ComboBox box;

box.focusedProperty().addListener(new ChangeListener<Boolean>(){
    @Override
    public void changed(ObservableValue<?extends Boolean> observable, Boolean oldValue, Boolean newValue){
        box.getEditor().selectAll();
    }
});

我甚至尝试了以下代码:

@FXML
ComboBox box;

box.getEditor().focusedProperty().addListener(new ChangeListener<Boolean>(){
    @Override
    public void changed(ObservableValue<?extends Boolean> observable, Boolean oldValue, Boolean newValue){
        box.getEditor().selectAll();
    }
});

但两者都不起作用。如果有人可以帮助我,那将非常有帮助。

1 个答案:

答案 0 :(得分:2)

此问题有一个错误:https://bugs.openjdk.java.net/browse/JDK-8129400

你应该可以使用下面的方法解决它,当你在组合框中选择一个新项目时,或者当你重新聚焦组合框时选择文本

    box.focusedProperty().addListener((observable, oldValue, newValue) -> {
        selectTextIfFocused(box);
    });
    box.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
        selectTextIfFocused(box);
    });

选择文字的方法:

private void selectTextIfFocused(ComboBox box){
    Platform.runLater(() -> {
        if ((box.getEditor().isFocused() || box.isFocused()) && !box.getEditor().getText().isEmpty()) {
            box.getEditor().selectAll();
        }
    });
}