如何在 JavaFX 中监听 Stage 的 resize 事件?
How to listen resize event of Stage in JavaFX?
我想对表单的调整大小事件(或 Scene
或 Stage
执行一些功能)。
但是如何在 JavaFX 中检测表单的调整大小事件?
你可以听到Stage
的widthProperty
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 与旧值 防止重复。
我想对表单的调整大小事件(或 Scene
或 Stage
执行一些功能)。
但是如何在 JavaFX 中检测表单的调整大小事件?
你可以听到Stage
的widthProperty
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 与旧值 防止重复。