本文介紹了如何在JavaFX中綁定舞臺寬度和高度?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我希望將舞臺的寬度和高度綁定在一起,因此用戶只能通過保持縱橫比來調整它的大小。
這不起作用:
stage.widthProperty().bind(stage.heightProperty());
還有另一種方法:
stage.minHeightProperty().bind(scene.widthProperty().multiply(1.3));
stage.maxHeightProperty().bind(scene.widthProperty().multiply(1.3));
但通過這種方式,我只設置了寬度值。
我如何才能解決這個問題?
謝謝,
Tibor
推薦答案
因為width
和height
屬性是只讀的,所以您不能將它們綁定到任何東西,更不用說相互綁定了。它們是只讀的原因是documented:
許多
Stage
屬性是只讀的,因為它們可以由基礎平臺在外部更改,因此不能是可綁定的[因為無法設置綁定的屬性]。
width
和height
屬性在其文檔中都有類似的語句。
您仍然可以向每個屬性添加偵聽器,并且當一個屬性發生更改時,將另一個屬性設置為新值。為了確保這不會導致StackOverflowError
,您必須跟蹤當前是否在偵聽器中設置該值。例如:
// not actually "binding" in the context of Property.bind(...)
public static void bindWidthAndHeightTogether(Window window, double widthToHeightRatio) {
ChangeListener<Number> listener =
new ChangeListener<>() {
private boolean changing;
@Override
public void changed(ObservableValue<? extends Number> obs, Number ov, Number nv) {
if (!changing) {
changing = true;
try {
if (obs == window.widthProperty()) {
window.setHeight(nv.doubleValue() / widthToHeightRatio);
} else {
window.setWidth(nv.doubleValue() * widthToHeightRatio);
}
} finally {
changing = false;
}
}
}
};
window.widthProperty().addListener(listener);
window.heightProperty().addListener(listener);
}
上述方法適用于我在使用JavaFX 14的Windows 10上。請注意,它會阻止窗口正確最大化,但不會全屏顯示(至少在Windows 10上)。
這篇關于如何在JavaFX中綁定舞臺寬度和高度?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,