JavaFX打开TextInputDialog时取消文本选中,调用deselect()无效如何解决
问题原因
你代码中deselect()方法调用时机完全错误:showAndWait()是阻塞调用,会一直等待弹窗关闭之后才会执行后续代码,此时你再操作输入框的选中状态,已经不会作用于弹窗打开的阶段,自然没有任何效果。
解决方法
我们需要在弹窗显示前预先配置好取消选中的逻辑,等待弹窗显示、默认全选逻辑执行完成后触发取消选中操作,示例代码如下:
import javafx.application.Platform; import javafx.scene.control.TextField; import javafx.scene.control.TextInputDialog; // ... 你的业务代码 TextInputDialog textInput = new TextInputDialog("whatever text"); textInput.initOwner(sentence.stage); TextField inputEditor = textInput.getEditor(); // 监听弹窗显示状态,显示时触发取消选中逻辑 textInput.showingProperty().addListener((observable, oldShowing, newShowing) -> { if (newShowing) { // 用Platform.runLater保证逻辑在默认全选操作之后执行 Platform.runLater(inputEditor::deselect); } }); Optional<String> result = textInput.showAndWait(); if (result.isPresent()) { // 处理返回结果 }
内容的提问来源于stack exchange,提问作者Hasen
相关产品推荐
相关产品推荐

