【发布时间】:2016-11-08 01:09:35
【问题描述】:
我想对表单的 resize 事件执行一些功能(或 Scene 或 Stage 不管它是什么)。
但是如何在 JavaFX 中检测表单的调整大小事件?
【问题讨论】:
标签: java javafx properties javafx-8 listener
我想对表单的 resize 事件执行一些功能(或 Scene 或 Stage 不管它是什么)。
但是如何在 JavaFX 中检测表单的调整大小事件?
【问题讨论】:
标签: java javafx properties javafx-8 listener
你可以听听widthProperty和Stage的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);
}
});
您可能还想用旧值检查新的宽度/高度,以防止重复。
【讨论】: