首页 > 解决方案 > JavaFX - 打开新阶段时取消选择 TextField 中的文本

问题描述

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

创建舞台时,场景包含表单,TextField 必须预先加载一个字符。问题是,当表格出现时,字符被选中,如图所示。

我尝试了 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();
    }

标签: javajavafx

解决方案


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

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

推荐阅读