如何在 JavaFX 中监听 Stage 的 resize 事件?

How to listen resize event of Stage in JavaFX?

我想对表单的调整大小事件(或 SceneStage 执行一些功能)。

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

你可以听到StagewidthProperty and the heightProperty的变化:

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); 

保持固定的宽高比:

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

长话短说:

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);
        }
    });

您可能还需要检查新的 width/height 与旧值 防止重复