Stage类
Stage 舞台
JavaFX Stage 类是 JavaFX 的顶级容器。主要的 Stage 由平台构建(primaryStage)。其他 Stage 对象可由应用程序构建。
package javafx.stage;
public class Stage extends Window { }
public class Window implements EventTarget { }Stage 对象必须在 JavaFX 应用程序线程上构建和修改。
有些 Stage 属性即使有相应的设置方法,也是只读的。
因为底层平台可能会从外部更改这些属性,因此这些属性必须是不可绑定的。此外,这些属性在某些平台上可能会被忽略,这取决于是否存在窗口管理器以及窗口管理器的配置方式。例如,没有窗口管理器的平台可能会忽略 iconified 属性。
风格 Style
Stage 可有如下之一的 Style:
StageStyle.DECORATED:一个纯白背景和平台装饰的舞台。(默认)StageStyle.UNDECORATED:纯白背景、无装饰的舞台。StageStyle.TRANSPARENT:背景透明、无装饰的舞台。StageStyle.UTILITY:一个纯白背景、平台装饰极少的舞台。
Style 必须在舞台可见之前初始化,可通过 Stage 构造方法传入 Style。
- 在某些平台上,可能无法使用装饰。例如,在某些移动或嵌入式设备上。在这种情况下,将接受装饰窗口或实用窗口的请求,但不会显示任何装饰。
所有者 Owner
一个 Stage 对象可以选择拥有一个窗口 Window,这个 Window 称为这个 Stage 的父窗口。
根据是否被 Window 拥有(有无父窗口),Stage 可以分为:
- Unowned Stages:无所有者Stage。例如:顶层 Stage。
- Owned Stages:所有Stage。指定了父Window的Stage。
Stage 是 Window 的一个子类。
Owned Stages are tied to the parent Window. An owned stage will always be on top of its parent window. When a parent window is closed or iconified, then all owned windows will be affected as well. Owned Stages cannot be independantly iconified.
Owned Stages 与父窗口绑定。Owned Stages 始终位于父窗口的顶部。当父窗口关闭或图标化时,所有 Owned Stages 也将受到影响。Owned Stages 不能独立进行图标化。
父窗口必须在 Owned Stages 可见之前初始化。
// 获取父窗口,无则返回 null
Window getOwner();
// 设置父窗口,顶层 Stage 可以设置为 null
void initOwner(Window owner);通过设置所有者,可以将多个Window串成一颗Window树。
模态 Modality
Stage 可有如下之一的 Modality:
Modality.NONE:这个 Stage 不遮挡任何其他窗口的舞台。Modality.WINDOW_MODAL:阻塞 Stage 所在Window树中的所有其他Window。Modality.APPLICATION_MODAL:阻塞 Stage 的父Window和所有祖父Window。
当窗口被模态阻塞时,它不会接收输入事件和窗口激活事件,而是继续正常地进行动画和渲染。请注意,显示模态阶段并不一定会阻塞调用者。无论舞台的模式如何,show() 方法都会立即返回。如果需要阻止调用者直到模态舞台隐藏(关闭),请使用 showAndWait() 方法。模态必须在Stage可见之前初始化。
Stage 常用 API
Stage 有着丰富的 set、get、is 方法,可以很方面地设置、获取有关属性。
关键字:
- resizable,fullScreen
- height,width
- icon,title,scene
- style,top,back,front
stage.setTitle("Welcome to JavaFX!");
stage.setScene(scene);
stage.sizeToScene();
stage.show();
stage.close();