events - JavaFX : Focusing textfield programmatically

标签 events focus javafx-2 textfield

我用 JavaFX 编写了一个应用程序,它只能与键盘的箭头一起使用。 所以我在Scene的舞台上阻止了MouseEvent,并“监听”KeyEvents。 我还关闭了所有节点的可聚焦性:

for(Node n : children) {
     n.setFocusTraversable(false);

现在我有一些文本字段、复选框和按钮。 我想以编程方式更改输入控件(文本字段、复选框等)的状态:例如,我想输入文本字段以以编程方式编辑内容。 所以我的问题是:如何在非焦点可遍历的文本字段中输入? 因为textfield.requestFocus();自从我将文本字段的 focustraversable 属性设置为 false 以来,它不再起作用。

谢谢

最佳答案

通过以下代码:

n.setFocusTraversable(false);

...节点变为不可焦点遍历而不是不可焦点。它仍然可以通过鼠标或编程方式进行聚焦。由于您阻止了鼠标事件,因此还有另一个选项:

Platform.runLater(() -> textfield.requestFocus());

Scene scene = new Scene(root);

编辑:根据评论,
requestFocus 的 Javadoc 指出:

... To be eligible to receive the focus, the node must be part of a scene, it and all of its ancestors must be visible, and it must not be disabled. ...

因此应该在构建场景图后调用此方法,如下所示:

Scene scene = new Scene(root);
textfield.requestFocus();

但是上面的Platform.runLater会在最后运行,在主方法start()之后,这保证了requestFocus的调用会在场景图构建之后进行。

可能还有其他原因,具体取决于 requestFocus 实现代码。

关于events - JavaFX : Focusing textfield programmatically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20049452/

相关文章:

c# - 在 WPF 中,如何在外部提供的元素上触发鼠标事件?

javascript - angularjs 在事件内调用 Controller 的函数

java - 尝试使用 JavaFX 2 实现 "Caret Browsing"

javafx-2 - Javafx旋转标签问题

tabs - Javafx 2.0 - 在 EventHandler 中获取 ContextMenu 父节点

javascript ajax 有时无法执行

c# - 使用静态类/事件作为应用程序消息总线是否存在缺陷

c# - 我如何聚焦外国窗口?

javascript - 焦点在 Mozilla Firefox 中不起作用

WPF - 创建一个真实世界的应用程序,专注于主要目标 - 不要偏离轨道