我设计了一个带有 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();
}
最佳答案
这是一个邪恶的拐杖,但这个工作。
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();
}
});
}
关于JavaFX - 打开新阶段时取消选择 TextField 中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52304360/