653 字
3 分钟
窗口Stage

窗口的基础设置#

1. 设置标题#

stage.setTitle("第一个JavaFx窗口");

2. 设置图标#

stage.getIcons().add(new Image("img.png"));

3. 设置最小化#

  • true 开启最小化
  • false 关闭最小化
stage.setIconified(true);

4. 设置最大化#

  • true 开启最大化
  • false 关闭最大化
stage.setMaximized(false);

5. 设置宽度和高度#

stage.setWidth(500);
stage.setHeight(500);

6. 设置最大宽度和最大高度#

stage.setMaxWidth(800);
stage.setMaxHeight(800);

7. 设置最小宽度和最小高度#

stage.setMinWidth(100);
stage.setMinHeight(100);

8. 设置固定窗口大小#

  • true 开启
  • false 关闭
stage.setResizable(true);

9. 设置全屏#

  • 设置画布, 下一篇说,但是要想设置全屏生效,就必须要先设置画布
stage.setScene(new Scene(new Group()));
stage.setFullScreen(true);

10. 设置x轴和y轴坐标#

stage.setX(800);
stage.setY(800);

11. 设置窗口透明度#

取值为 0 - 1 之间

stage.setOpacity(0.5);

12. 设置窗口置顶#

stage.setAlwaysOnTop(true);

13. 获取宽度和高度#

如果设置了宽和高,那么会输出你设置的宽和高,如果没有设置,那么有可能输出NaN 要注意获取宽和高的代码位置,如果在show()方法之前,那么此时stage窗口还没有显示出来,自然没有宽和高

stage.getHeight();
stage.getWidth();

14. 获取x轴和y轴坐标#

stage.getX();
stage.getY();

15. 显示窗口#

stage.show();

16. 关闭窗口#

stage.close();

窗口样式#

DECORATED#

默认窗口样式,一个带有系统默认装饰的窗口,包含标题栏、最小化按钮、最大化按钮和关闭按钮等标准的窗口控制元素。

stage.initStyle(StageStyle.DECORATED);

TRANSPARENT#

创建一个透明的窗口,不仅没有窗口装饰,而且窗口的背景也是透明的。常用于创建一些特效窗口。

如果不设置画布(Scene),那么运行时是透明的,如果设置了画布,则和UNDECORATED效果一样。因为画布是不透明的

s2.initStyle(StageStyle.TRANSPARENT);

UNDECORATED#

创建一个没有任何窗口装饰的窗口,即没有标题栏和窗口控制按钮。通常用于自定义窗口外观的场景。

需要设置画布(Scene)才能看到效果

s5.setScene(new Scene(new Group()));
stage.initStyle(StageStyle.UNDECORATED);

UNIFIED#

创建一个实用工具类型的窗口,通常具有简化的窗口装饰,没有最大化按钮,标题栏也可能更简洁。

stage.initStyle(StageStyle.UNIFIED);

UTILITY#

工具类型的窗口,类似与弹窗消息,仅有关闭按钮

stage.initStyle(StageStyle.UTILITY);

监听器#

高度监听器#

stage.heightProperty().addListener(new ChangeListener<Number>() {
    @Override
    public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
        System.out.println("高度为:" + newValue.doubleValue());
    }
});

宽度监听器#

stage.widthProperty().addListener(new ChangeListener<Number>() {
    @Override
    public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
        System.out.println("宽度为:" + newValue.doubleValue());
    }
});

X轴坐标监听器#

stage.xProperty().addListener(new ChangeListener<Number>() {
    @Override
    public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
        System.out.println("X:" + newValue.doubleValue());
    }
});

Y轴坐标监听器#

stage.yProperty().addListener(new ChangeListener<Number>() {
    @Override
    public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
        System.out.println("Y:" + newValue.doubleValue());
    }
});
窗口Stage
https://geeknas.cn/posts/javafx系列/窗口-stage/
作者
Penn He
发布于
2025-02-26
许可协议
CC BY-NC-SA 4.0