【问题标题】:How to listen resize event of Stage in JavaFX?如何在 JavaFX 中监听 Stage 的 resize 事件?
【发布时间】:2016-11-08 01:09:35
【问题描述】:

我想对表单的 resize 事件执行一些功能(或 SceneStage 不管它是什么)。

但是如何在 JavaFX 中检测表单的调整大小事件?

【问题讨论】:

    标签: java javafx properties javafx-8 listener


    【解决方案1】:

    你可以听听widthPropertyStageheightProperty的变化:

    stage.widthProperty().addListener((obs, oldVal, newVal) -> {
         // Do whatever you want
    });
    
    stage.heightProperty().addListener((obs, oldVal, newVal) -> {
         // Do whatever you want
    });
    

    注意:要同时监听宽度和高度的变化,可以非常简单地使用同一个监听器:

    ChangeListener<Number> stageSizeListener = (observable, oldValue, newValue) ->
        System.out.println("Height: " + stage.getHeight() + " Width: " + stage.getWidth());
    
    stage.widthProperty().addListener(stageSizeListener);
    stage.heightProperty().addListener(stageSizeListener); 
    

    【讨论】:

    • 我正在尝试获取 stageSizeListener 上的窗格大小,就像这里建议的那样。它有效,但有错误。触发舞台侦听器后,似乎我的窗格大小已调整大小。这会在全屏和反转时反转我的尺寸。真的很糟糕。如果我慢慢调整大小,它看起来不错,但是当我快速调整大小时就不行了。
    • 这会调用两次“随心所欲”,有没有更优雅的方式?
    • 理论上可以构建一个更改缓冲区并仅在某个阈值之后对其进行处理,这与您在文本区域中键入时的方式相同,并且仅当您“停止”键入时才会触发更改事件.构建一个通用的 DelayedChangeListener 甚至会非常简单。
    • 我可以让这段代码在舞台上工作,但我不明白如何将它赶上堆栈。或者即使你可以。例如,如果你检测到舞台上的变化,我是否必须在场景中触发一个事件,然后向上堆栈?假设舞台 -> 场景 -> vbox -> vbox2 -> 节点。如何在 vbox2 中过滤以了解阶段的更改?
    【解决方案2】:

    保持固定的宽高比:

    stage.minHeightProperty().bind(stage.widthProperty().multiply(0.5));
    stage.maxHeightProperty().bind(stage.widthProperty().multiply(0.5));
    

    【讨论】:

      【解决方案3】:

      长话短说:

      container.widthProperty().addListener(new ChangeListener<Number>() {
              @Override
              public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
                  if (newValue.floatValue()!=oldValue.floatValue()) resizeKids(newValue);
              }
          });
      

      您可能还想用旧值检查新的宽度/高度,以防止重复

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-02
        • 1970-01-01
        • 1970-01-01
        • 2012-09-02
        • 2020-11-22
        • 2023-04-02
        • 1970-01-01
        相关资源
        最近更新 更多