java - 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();
}
解决方案
这是一个邪恶的拐杖,但这是工作。
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();
}
});
}
推荐阅读
- c# - 从 C# 中获取 Write-Progress -PercentComplete 状态
- docker - 在 Docker 中创建 Jenkins 的卷备份
- c# - 调用 GC.Collect() 有什么风险?
- powershell - 如何打开两个运行命令然后返回用户输入的 powershell 控制台?
- java - 将媒体项添加到 MediaBrowserService
- r - R将GPS转换为带有时间戳的GPX
- php - 在 PHP 函数中返回字符串
- java - 使用 Eclipse EE 和 PostgreSQL 的登录/注册表单
- javascript - 为什么人们通常将 node_modules/.bin 内容称为“二进制文件”?
- google-bigquery - 在 Big Query 中使用 Filldown 的 Split()