JavaFX-在打开新阶段时取消选择TextField中的文本

时间:2018-09-12 22:36:12

标签: java javafx

我设计了一个带有TextField和Button的简单表单。

创建舞台时,场景包含表单,必须在TextField中预装一个字符。问题是,当表单显示出来时,就选择了字符,如image所示。

我尝试了textfield.deselect()或textfield.positionCaret(1)(或两者),但没有任何改变。 我不想删除对文本字段的关注,而是取消选择文本并在最后移动插入记号(这样,如果用户写了一些东西,第一个字符将不会被覆盖)。

这是我写的代码:

try {
        Stage primaryStage = new Stage();
        FXMLLoader loader = new FXMLLoader();
        Pane root = loader.load(getClass().getResource("/resources/view/quick-search.fxml").openStream());
        QuickSearchCtrl quickSearchCtrl = (QuickSearchCtrl) loader.getController();
        quickSearchCtrl.text_tf.setText(text);
        quickSearchCtrl.text_tf.deselect();
        primaryStage.setTitle("");
        primaryStage.setScene(new Scene(root, 230, 54));
        primaryStage.show();
        primaryStage.setResizable(false);
    } catch (IOException e) {
        e.printStackTrace();
    }

1 个答案:

答案 0 :(得分:0)

这是一个邪恶的拐杖,但这项工作。

quickSearchCtrl.text_tf.setText(text);
deselect(quickSearchCtrl.text_tf);

private void deselect(TextField textField) {
    Platform.runLater(() -> {
        if (textField.getText().length() > 0 &&
                textField.selectionProperty().get().getEnd() == 0) {
            deselect(textField);
        }else{
            textField.selectEnd();
            textField.deselect();
        }
    });
}