【发布时间】:2014-03-14 22:12:21
【问题描述】:
我是 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);
这些都不能正常工作。当我运行它时,无论我点击堆栈窗格多少次,输出都只显示这 3 行。
Focus Gained.
Focus Lost.
Focus Gained.
请帮忙。
【问题讨论】:
-
我没有得到和你一样的结果。你有SSCCE吗?