我设计了一个带有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();
}
答案 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();
}
});
}