Javafx 实现上下文相关菜单栏的惯用方法?

Javafx 实现上下文相关菜单栏的惯用方法?,javafx,javafx-2,Javafx,Javafx 2,我定义了一个@FXML Menu editMenu,我想根据我的TreeViews中的哪个当前处于焦点位置,以及是否选择了任何TreeItems来填充它 这样做的惯用方式是什么?我还没有为TreeViews找到一个好的onFocus方法 谢谢 所有节点都有一个可注册侦听器的。此外,场景还有一个可以观察的属性 所以你可以做一些像 scene.focusOwnerProperty().addListener(new ChangeListener<Node>() { @Overri

我定义了一个
@FXML Menu editMenu
,我想根据我的
TreeView
s中的哪个当前处于焦点位置,以及是否选择了任何
TreeItem
s来填充它

这样做的惯用方式是什么?我还没有为
TreeView
s找到一个好的
onFocus
方法


谢谢

所有
节点
都有一个可注册侦听器的。此外,
场景
还有一个可以观察的属性

所以你可以做一些像

scene.focusOwnerProperty().addListener(new ChangeListener<Node>() {
    @Override
    public void changed(ObservableValue<? extends Node> obs, Node oldFocusOwner, Node newFocusOwner) {
        // update menu based on newFocusOwner
    }
});

其中
someNode
是场景图中的任意节点。

所有
节点都有一个可以注册侦听器的节点。此外,
场景
还有一个可以观察的属性

所以你可以做一些像

scene.focusOwnerProperty().addListener(new ChangeListener<Node>() {
    @Override
    public void changed(ObservableValue<? extends Node> obs, Node oldFocusOwner, Node newFocusOwner) {
        // update menu based on newFocusOwner
    }
});

其中
someNode
是场景图中的任意节点。

所有
节点都有一个可以注册侦听器的节点。此外,
场景
还有一个可以观察的属性

所以你可以做一些像

scene.focusOwnerProperty().addListener(new ChangeListener<Node>() {
    @Override
    public void changed(ObservableValue<? extends Node> obs, Node oldFocusOwner, Node newFocusOwner) {
        // update menu based on newFocusOwner
    }
});

其中
someNode
是场景图中的任意节点。

所有
节点都有一个可以注册侦听器的节点。此外,
场景
还有一个可以观察的属性

所以你可以做一些像

scene.focusOwnerProperty().addListener(new ChangeListener<Node>() {
    @Override
    public void changed(ObservableValue<? extends Node> obs, Node oldFocusOwner, Node newFocusOwner) {
        // update menu based on newFocusOwner
    }
});

其中
someNode
是场景图中的任意节点。

谢谢!这是否意味着
场景
对象经常更改?只需将
菜单更新者
添加到当前
场景
焦点属性
就行不通了?不,场景
不会经常更改。但是如果您使用的是FXML,则可能是在控制器的
initialize()
方法中执行此操作,该方法(显然)是在将FXML中定义的
节点添加到
场景之前调用的。如果您可以直接访问代码中的
场景
,则可以使用第一个代码示例。谢谢!这是否意味着
场景
对象经常更改?只需将
菜单更新者
添加到当前
场景
焦点属性
就行不通了?不,场景
不会经常更改。但是如果您使用的是FXML,则可能是在控制器的
initialize()
方法中执行此操作,该方法(显然)是在将FXML中定义的
节点添加到
场景之前调用的。如果您可以直接访问代码中的
场景
,则可以使用第一个代码示例。谢谢!这是否意味着
场景
对象经常更改?只需将
菜单更新者
添加到当前
场景
焦点属性
就行不通了?不,场景
不会经常更改。但是如果您使用的是FXML,则可能是在控制器的
initialize()
方法中执行此操作,该方法(显然)是在将FXML中定义的
节点添加到
场景之前调用的。如果您可以直接访问代码中的
场景
,则可以使用第一个代码示例。谢谢!这是否意味着
场景
对象经常更改?只需将
菜单更新者
添加到当前
场景
焦点属性
就行不通了?不,场景
不会经常更改。但是如果您使用的是FXML,则可能是在控制器的
initialize()
方法中执行此操作,该方法(显然)是在将FXML中定义的
节点添加到
场景之前调用的。如果您可以直接访问代码中的
场景
,则可以使用第一个代码示例。