2
我想将焦点设置为Tab中内容的特定节点。我加了的ChangeListener到将selectedItem特性如下(假设类包含一个名为secondNode型节点场):如何在JavaFX中选定选项卡更改时聚焦特定节点?
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执行了一些额外的操作,这些操作会影响焦点,在选中新选项卡后(但是,通过TabPane source code查看,我无法弄清楚)。如果我在调试器中单步执行此代码,它将按预期工作,因此它似乎是竞争条件。如果是这样,这怎么解决?
嗯,这会工作,毫无疑问,但它取决于线程处于睡眠状态的时间。如果你的价值太低,你仍然可能有竞争条件,如果价值太高,那么焦点就会有明显的转变。所以这是一种骇人听闻的解决方案。不过,这是一个解决方案,所以我会接受它。 –
我同意它的黑客,但不幸的是,我不得不多次使用这种技术来处理FX的其他方面。我希望在FX 8中更好。 – Jurgen