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