gpt4 book ai didi

java - JavaFX 节点的焦点监听器

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:56 25 4
gpt4 key购买 nike

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

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

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

一旦我点击另一个堆栈 Pane ,第一个堆栈 Pane 应该调用它的焦点丢失方法,并且应该调用当前堆栈 Pane 的焦点获得方法。就像我们在 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.");
}

我还尝试在堆栈 Pane 上设置焦点可遍历属性,即

stackPane.setFocusTraversable(true);

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

Focus Gained.
Focus Lost.
Focus Gained.

请帮忙。

最佳答案

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

root.focusedProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) -> {
focusState(newValue);
});

private void focusState(boolean value) {
System.out.println(value ? "Focus gained" : "Focus lost");
}

关于java - JavaFX 节点的焦点监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21798183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com