1

Swing 中有一个 FocusManager 可用于在焦点更改时获得通知。

FocusManager.getCurrentManager().addPropertyChangeListener (...)

如果场景图中的焦点发生变化,javafx 中是否有类似的方式来获得通知?

4

2 回答 2

2

您现在可以将 a 添加ChangeListener到 a 的focusOwner属性中Scene

scene.focusOwnerProperty().addChangeListener(...)
于 2013-10-27T23:33:20.647 回答
0

目前还没有,但您可以尝试在目标节点的focusedProperties 之间手动循环

private void handleFocusChangesStartingFromParentNode(Parent parentNode) {

    for (Node node : parentNode.getChildrenUnmodifiable()) {
        node.focusedProperty().addListener(new ChangeListener<Boolean>() {
            @Override
            public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
                performHandling();
            }
        });
        try{
            handleFocusChangesStartingFromNode((Parent)node);
        }catch(ClassCastException e){
        }
    }
}
于 2013-07-26T23:49:23.793 回答