如何将JavaFX Stage大小限制为一个正方形(宽度=高度)? [英] How to constrain JavaFX Stage size to a square (width = height)?
本文介绍了如何将JavaFX Stage大小限制为一个正方形(宽度=高度)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我一开始尝试执行看似简单的任务,但我无法使其工作.
I tried to implement what seemed to be an easy task at first, but I can't make it work.
我想强制主应用程序窗口为正方形.
I would like to force the main application window to be square.
以下代码段在调整窗口高度(闪烁,但宽度已正确更新)时有效,但是当我更改舞台的宽度时,它不会重新调整大小.
The following snippet works when resizing the height of the window (it flickers, but the width is properly updated), but when I change the width of the stage it doesn't resize.
有人知道有一种更好的方法来限制javafx中的舞台大小吗?
Does anyone know a better approach for constraining the stage size in javafx?
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.stage.Stage;
public class SquareStage extends Application {
public void start(Stage stage) throws Exception {
stage.setTitle("Square Stage");
stage.setWidth(300);
stage.setHeight(300);
ChangeListener<? super Number> listener = (ObservableValue<? extends Number> prop, Number oldVal, Number newVal) -> {
if (prop == stage.widthProperty()) {
stage.setHeight(newVal.doubleValue());
}
if (prop == stage.heightProperty()) {
stage.setWidth(newVal.doubleValue());
}
};
stage.widthProperty().addListener(listener);
stage.heightProperty().addListener(listener);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
推荐答案
更改值时请使用removeListener和addListener,以防止侦听器链接.
Use removeListener and addListener when changing value to prevent listeners from chaining.
private ChangeListener<? super Number> widthChangeListener;
private ChangeListener<? super Number> heightChangeListener;
@Override
public void start(Stage primaryStage) throws Exception {
widthChangeListener = (observable, oldValue, newValue) -> {
primaryStage.heightProperty().removeListener(heightChangeListener);
primaryStage.setHeight(newValue.doubleValue());
primaryStage.heightProperty().addListener(heightChangeListener);
};
heightChangeListener = (observable, oldValue, newValue) -> {
primaryStage.widthProperty().removeListener(widthChangeListener);
primaryStage.setWidth(newValue.doubleValue());
primaryStage.widthProperty().addListener(widthChangeListener);
};
primaryStage.widthProperty().addListener(widthChangeListener);
primaryStage.heightProperty().addListener(heightChangeListener);
}
这篇关于如何将JavaFX Stage大小限制为一个正方形(宽度=高度)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文