我想将焦点设置到选项卡内容中的特定节点。我添加了一个变化监听器 to 选定的项目属性如下(假设该类包含一个名为第二个节点类型的Node):
tabPane.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Tab>() {
@Override
public void changed(ObservableValue<? extends Tab> observable, Tab oldValue, Tab newValue) {
if (newValue != null) {
Platform.runLater(new Runnable() {
@Override
public void run() {
secondNode.requestFocus();
}
});
}
}
});
然而,这是行不通的。我认为原因是因为 TabPane 在选择新选项卡后执行了一些额外的操作,这些操作会影响焦点(但是,查看选项卡窗格源代码 http://hg.openjdk.java.net/openjfx/2.2/master/rt/file/e71070b0e0c0/javafx-ui-controls/src/javafx/scene/control/TabPane.java,我不明白是什么)。如果我在调试器中单步执行此代码,它会按预期工作,因此它似乎是一个竞争条件。如果是这样的话,该如何解决呢?
您可以尝试用任务替换 Runnable:
new Thread( new Task<Void>()
{
@Override
public Void call() throws Exception // This is NOT on FX thread
{
Thread.sleep(100);
return null;
}
@Override
public void succeeded() // This is called on FX thread.
{
secondNode.requestFocus();
}
}).start();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)