JavaFX - 将侦听器添加到窗格以检查它是否显示
JavaFX - Add a Listener to a Pane to check if it is showing
最近几个月我正在研究 JavaFX。我正在尝试找到一种方法来实现一个监听器,只要在根 pane/scene 上显示特定窗格,就会触发该监听器。在 Java 中,我可以使用 JPanel 上的 ancestorListener 实现它,如下所示,但我在 JavaFX 上找不到等效方法。
JPanel panel = new JPanel ();
panel.addAncestorListener ( new AncestorListener ()
{
public void ancestorAdded ( AncestorEvent event ) {
System.out.println("This panel is shown on screen now");
}
public void ancestorRemoved ( AncestorEvent event ){}
public void ancestorMoved ( AncestorEvent event ){}
} );
您可以观察sceneProperty()
。这将告诉您窗格(或任何其他节点)是否是场景图的一部分:
pane.sceneProperty().addListener((obs, oldScene, newScene) -> {
if (newScene == null) {
// not showing...
} else {
// showing ...
}
});
如果您想更进一步,查看窗格是否是正在显示的 window 中的场景图的一部分,您可以使用 EasyBind:
EasyBind.select(pane.sceneProperty())
.select(Scene::windowProperty)
.select(Window::showingProperty)
.orElse(false)
.addListener((obs, wasShowing, isNowShowing) -> {
if (isNowShowing) {
// pane is showing in a window...
} else {
// pane is not showing in a window...
});
最近几个月我正在研究 JavaFX。我正在尝试找到一种方法来实现一个监听器,只要在根 pane/scene 上显示特定窗格,就会触发该监听器。在 Java 中,我可以使用 JPanel 上的 ancestorListener 实现它,如下所示,但我在 JavaFX 上找不到等效方法。
JPanel panel = new JPanel ();
panel.addAncestorListener ( new AncestorListener ()
{
public void ancestorAdded ( AncestorEvent event ) {
System.out.println("This panel is shown on screen now");
}
public void ancestorRemoved ( AncestorEvent event ){}
public void ancestorMoved ( AncestorEvent event ){}
} );
您可以观察sceneProperty()
。这将告诉您窗格(或任何其他节点)是否是场景图的一部分:
pane.sceneProperty().addListener((obs, oldScene, newScene) -> {
if (newScene == null) {
// not showing...
} else {
// showing ...
}
});
如果您想更进一步,查看窗格是否是正在显示的 window 中的场景图的一部分,您可以使用 EasyBind:
EasyBind.select(pane.sceneProperty())
.select(Scene::windowProperty)
.select(Window::showingProperty)
.orElse(false)
.addListener((obs, wasShowing, isNowShowing) -> {
if (isNowShowing) {
// pane is showing in a window...
} else {
// pane is not showing in a window...
});