JavaFX节点的Focus Listener

我是JavaFX的初学者。 我真的陷入了困境。 :(对不起,如果我的英语很差。

我的JavaFX程序中有两个堆栈窗格。 我想为这两个堆栈窗格添加一个焦点监听器。

它应该是这样的,当我点击一个堆栈窗格时,它应该激活此堆栈窗格的焦点获取方法。

一旦我单击另一个堆栈窗格,第一个堆栈窗格应该调用其焦点丢失方法,并且应该调用当前堆栈窗格的焦点获取方法。 就像我们在Swing包中有焦点事件一样。

目前我试过这个:

stackPane.focusedProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { if (newValue.booleanValue()) { focusGained(stackPane); } else { focusLost(stackPane); } } }); private void focusGained(StackPane stackPane){ System.out.println("Focus Gained."); } private void focusLost(StackPane stackPane){ System.out.println("Focus Lost."); } 

我还试图在堆栈窗格上设置焦点遍历属性,即

 stackPane.setFocusTraversable(true); 

这些都不能正常工作。 当我运行它时,输出只显示这3行,无论我点击堆栈窗格多少次。

 Focus Gained. Focus Lost. Focus Gained. 

请帮忙。

嗯,这有点晚了,但它可能对其他人有所帮助。 这很好用:

 root.focusedProperty().addListener((ObservableValue observable, Boolean oldValue, Boolean newValue) -> { focusState(newValue); }); private void focusState(boolean value) { if (value) { System.out.println("Focus Gained"); } else { System.out.println("Focus Lost"); } }