【问题标题】:JavaFX TextInputControl requestFocusJavaFX TextInputControl requestFocus
【发布时间】:2012-11-14 21:24:03
【问题描述】:

我正在尝试从 TextInputControl 调用 requestFocus 方法。没有成功。 当我打开一个新选项卡时,我想将焦点设置在 TextInputControl 上。我正在这样做:

tab.setContent(anchor);
tabPane.getTabs().add(tab);

SingleSelectionModel<Tab> selectionModel = tabPane.getSelectionModel();
selectionModel.select(tab);

focusTopLeftInputArea(anchor);

然后 focusTopLeftInputArea 找到一个 TextInputControl "ti" 并调用 ti.requestFocus()。

focusTopLeftInputArea 可以很好地找到 TextInputControl,但控件没有获得焦点。

【问题讨论】:

  • 我在应用程序中遇到了类似的问题,请阅读requestFocus 上的规则,在我的情况下,祖先节点有问题

标签: java javafx-2 javafx


【解决方案1】:

来自 Node 的 requestFocus 方法的 JavaFX Api 文档:

为了有资格获得焦点,节点必须是场景的一部分, 它和它的所有祖先都必须是可见的,并且不能是 已禁用。

那么,您究竟从哪里调用此代码?确保在您调用 requestFocus 时,您的控件已经是场景/舞台的一部分,并且调用是在 JavaFX 应用程序线程中完成的(这可以通过Platform.runLater() 调用来确保)。

【讨论】:

  • 谢谢@Sebastian。显然,mi control 不是场景的一部分。我已经尝试递归地探索场景图的节点,打印 node.getScene(),它一直工作直到它到达 ScrollPane,然后对于 ScrollPane 内容的所有子节点,node.getScene() 返回 null。有什么线索吗?
  • 如果没有进一步了解您的应用程序,我只能猜测问题所在。根据您的描述,您似乎正在为选项卡窗格创建内容,但从未将其添加到您的场景中。如果您将您的骨架应用程序结构发布到您的问题中将会很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 2014-08-28
  • 1970-01-01
  • 2019-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多