JavaFX节点的焦点侦听器

我是JavaFX的初学者.我真的被困在这一点上. :(对不起,如果我的英语不好.

我的JavaFX程序中有两个堆栈窗格.我想将焦点侦听器添加到这两个堆栈窗格中.

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

一旦单击另一个堆栈窗格,第一个堆栈窗格应调用其失去焦点的方法,并应调用当前堆栈窗格的获得焦点的方法.就像我们在Swing程序包中有焦点事件一样.

目前,我已经尝试过:

stackPane.focusedProperty().addListener(new ChangeListener<Boolean>() {

                @Override
                public void changed(ObservableValue<? extends Boolean> 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);

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

Focus Gained.
Focus Lost.
Focus Gained.

请帮忙.

解决方法:

好吧,这有点晚了,但可能会对其他人有所帮助.
这工作正常:

root.focusedProperty().addListener((ObservableValue<? extends Boolean> 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");
    }
}
上一篇:java-在ListView中侦听ScrollBar的更改


下一篇:nrf开发笔记一开发软件