什么是Stage

Stage就是传统意义上的窗口(或称窗体)。可以通过相关方法设置窗口的标题名称,大小尺寸等。Stage仅管理与窗口相关的属性,不涉及窗口内部的控件绘制。

常用方法

  1. // 窗口标题
  2. stage.setTitle("窗口标题");
  3. // 添加程序Icon图标,反斜杠开始的路径相对于classpath根目录开始的
  4. stage.getIcons().add(new Image("/logo.png"));
  5. // 设置窗口位置,屏幕左上角为坐标原点
  6. stage.setX(100);
  7. stage.setY(100);
  8. // 设置不透明度,取值0至1的浮点数,越大越不透明
  9. stage.setOpacity(0.5);
  10. // 窗口始终置于顶层
  11. stage.setAlwaysOnTop(true);
  12. // 窗口是否最小化,true最小化/false否
  13. stage.setIconified(true);
  14. // 窗口是否最大化,true最大化/false否
  15. stage.setMaximized(true);
  16. // 是否可以拖动窗口调整大小: true可以调整/false否
  17. stage.setResizable(true);
  18. // 设置最大宽度
  19. stage.setMaxWidth(1000);
  20. // 设置最大高度
  21. stage.setMaxHeight(1000);
  22. // 设置最小宽度
  23. stage.setMinWidth(100);
  24. // 设置最小高度
  25. stage.setMinHeight(100);
  26. // 设置Scene画布
  27. stage.setScene(new Scene(new Group()));
  28. // 使窗口全屏显示,需要设置scene属性,使画布内容不为空,全屏才能生效
  29. stage.setFullScreen(true);
  30. // 显示窗口
  31. stage.show();
  32. // 获取宽度(通常在stage.show()方法后使用,以获取经过计算后的宽高)
  33. stage.getWidth();
  34. // 获取高度(通常在stage.show()方法后使用,以获取经过计算后的宽高)
  35. stage.getHeight();
  36. // 关闭窗口
  37. stage.close();

初始样式

  1. // 初始化样式
  2. stage.initStyle(StageStyle.DECORATED); // 默认效果
  3. stage.initStyle(StageStyle.UNDECORATED);
  4. stage.initStyle(StageStyle.UNIFIED);
  5. stage.initStyle(StageStyle.UTILITY); // 只有关闭按钮的窗口
  6. stage.initStyle(StageStyle.TRANSPARENT); // 全透明窗口

模态框与非模态框

  1. // 非模态框
  2. stage.initModality(Modality.NONE);
  3. // 模态框
  4. stage.initModality(Modality.APPLICATION_MODAL);
  5. // 使用WINDOW_MODAL模态框时需要设置窗口的拥有者
  6. stage.initOwner(parentStage);
  7. stage.initModality(Modality.WINDOW_MODAL);

动态监听成员属性

  1. // 监听高度
  2. stage.heightProperty().addListener(new ChangeListener<Number>() {
  3. @Override
  4. public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
  5. System.out.println(newValue.doubleValue());
  6. }
  7. });
  8. // 监听宽度(lambda表达式写法)
  9. stage.widthProperty().addListener((observable, oldValue, newValue) -> System.out.println(newValue.doubleValue()));
  10. // 监听窗口坐标
  11. stage.xProperty().addListener((observable, oldValue, newValue) -> System.out.println(newValue));
  12. stage.yProperty().addListener((observable, oldValue, newValue) -> System.out.println(newValue));

什么是Scene

Scene即传统意义上的画布,用来绘制如按钮、文本框等控件。