【问题标题】:JavaFX - Add a Listener to a Pane to check if it is showingJavaFX - 将侦听器添加到窗格以检查它是否正在显示
【发布时间】:2015-06-16 05:17:32
【问题描述】:

过去几个月我一直在研究 JavaFX。我正在尝试找到一种方法来实现一个侦听器,该侦听器在根窗格/场景中显示特定窗格时触发。在 Java 中,我可以使用 JPanel 上的祖先监听器来实现这一点,如下所示,但我在 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 ){}
} );

【问题讨论】:

    标签: properties javafx listener javafx-8 show


    【解决方案1】:

    您可以观察sceneProperty()。这将告诉您窗格(或任何其他节点)是否是场景图的一部分:

    pane.sceneProperty().addListener((obs, oldScene, newScene) -> {
        if (newScene == null) {
            // not showing...
        } else {
            // showing ...
        }
    });
    

    如果您想更进一步,查看窗格是否是正在显示的窗口中的场景图的一部分,您可以使用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...
        });
    

    【讨论】:

      猜你喜欢
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 2011-09-28
      相关资源
      最近更新 更多