JavaFX 舞台(JavaFX Stage)
JavaFX Stage,即javafx.stage.Stage,表示JavaFX桌面应用程序中的一个窗口。在JavaFXStage
内,我们可以插入JavaFXScene
,它表示在Stage
内的窗口内显示的内容。
JavaFX应用程序启动时,会创建一个根目录" Stage"对象,该对象将传递到JavaFX应用程序根类的" start(Stage primaryStage)"方法。这个"阶段"对象代表JavaFX应用程序的主窗口。如果应用程序需要打开更多窗口,则可以在应用程序生命周期的稍后时间创建新的" Stage"对象。
创建一个舞台
我们可以像创建其他Java对象一样,创建JavaFXStage
对象:使用new
命令和Stage
构造函数。这是创建JavaFXStage
对象的示例。
Stage stage = new Stage();
展示舞台
简单创建JavaFXStage
对象不会显示它。为了使"舞台"可见,我们必须调用其" show()"或者" showAndWait()"方法。这是显示JavaFXStage
的示例:
Stage stage = new Stage(); stage.show();
show()与showAndWait()
JavaFX Stage方法show()和showAndWait()之间的区别在于,show()使Stage可见,并且立即退出show()方法,而showAndWait ()
显示Stage
对象,然后阻塞(停留在showAndWait()
方法内部),直到Stage
关闭为止。
在舞台上布置场景
为了显示JavaFXStage
内的任何内容,我们必须在Stage
上设置JavaFXScene
对象。当显示"舞台"时,"场景"的内容将显示在"舞台"内部。这是在JavaFXStage
上设置Scene
的示例:
VBox vBox = new VBox(new Label("A JavaFX Label")); Scene scene = new Scene(vBox); Stage stage = new Stage(); stage.setScene(scene);
舞台名称
我们可以通过Stage``setTitle()
方法设置JavaFXStage
标题。 "舞台"标题显示在"舞台"窗口的标题栏中。这是设置JavaFXStage
标题的示例:
stage.setTitle("JavaFX Stage Window Title");
舞台位置
我们可以通过JavaFXStage
的setX()和setY()方法设置其位置(X,Y)。 setX()和setY()方法设置由Stage表示的窗口左上角的位置。这是设置JavaFXStage
对象的X和Y位置的示例:
Stage stage = new Stage(); stage.setX(50); stage.setY(50);
请注意,如果我们设置X和Y位置,则可能还需要设置Stage
的宽度和高度,否则舞台窗口可能会变得非常小。有关设置Stage
的宽度和高度的更多信息,请参见下一部分。
舞台宽度和高度
我们可以通过JavaFXStage
的setWidth()和setHeight()方法设置其宽度和宽度。这是设置JavaFXStage
的宽度和高度的示例:
Stage stage = new Stage(); stage.setWidth(600); stage.setHeight(300);
舞台形态
我们可以设置JavaFXStage
的窗口模式。 "阶段"模式确定代表"阶段"的窗口是否会阻止同一JavaFX应用程序打开的其他窗口。我们可以通过JavaFXStage
的initModality()
方法设置窗口模式。这是设置JavaFXStage
模态的示例:
public class StageExamples extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { primaryStage.setTitle("JavaFX App"); Stage stage = new Stage(); stage.initModality(Modality.APPLICATION_MODAL); //stage.initModality(Modality.WINDOW_MODAL); //stage.initModality(Modality.NONE); primaryStage.show(); stage.showAndWait(); } }
请注意,此示例如何是完整的JavaFX应用程序。当JavaFX应用程序启动时执行start()方法(首先调用main(),它调用launch(),之后再调用start())。
还要注意,如何创建一个新的JavaFXStage
对象,设置其模态模式,然后使主要对象和新的Stage
对象都可见(如图所示)。第二个"阶段"将其模态设置为" Modality.APPLICATION_MODAL",这意味着它将阻止此JavaFX应用程序打开的所有其他窗口(阶段)。在关闭此"阶段"窗口之前,我们无法访问任何其他窗口。
" Modality.WINDOW_MODAL"模态选项意味着新创建的" Stage"将阻止"拥有"新创建的" Stage"的" Stage"窗口,但仅限于此。并非应用程序中的所有窗口。请参阅下面的下一部分,以了解如何设置"舞台"的"所有者"。
Modality.NONE
模态选项意味着该Stage
不会阻止在此应用程序中打开的任何其他窗口。
" Modality.APPLICATION_MODAL"和" Modality.WINDOW_MODAL"模态模式对于表示"窗口"对象的"舞台"对象很有用,这些窗口起着"向导"或者"对话框"的作用,这些窗口应阻塞应用程序或者窗口,直到向导或者对话框进程由向导完成。用户。 " Modality.NONE"模态对于表示可以共存的窗口的" Stage"对象很有用,例如浏览器应用程序中的不同浏览器窗口。
舞台所有者
一个JavaFXStage
可以由另一个Stage
拥有。我们可以通过其" initOwner()"方法设置"舞台"的所有者。这是一个初始化JavaFXStage
的所有者的示例,并将Stage
的模态设置为Modality.WINDOW_MODAL
:
public class StageExamples extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { primaryStage.setTitle("JavaFX App"); Stage stage = new Stage(); stage.initModality(Modality.WINDOW_MODAL); stage.initOwner(primaryStage); primaryStage.show(); stage.showAndWait(); } }
本示例将打开一个新的Stage
,它将阻止拥有新创建的Stage
(已设置为主级)的Stage
。
舞台样式
我们可以通过JavaFXStage
的initStyle()
方法设置样式。我们可以选择一组不同的样式:
- DECORATED
- UNDECORATED
- TRANSPARENT
- UNIFIED
- UTILITY
装饰的"舞台"是带有OS装饰(标题栏和最小化/最大化/关闭按钮)和白色背景的标准窗口。
未修饰的"舞台"是标准窗口,没有OS装饰,但仍带有白色背景。
透明的"阶段"是未装饰的窗口,具有透明的背景。
统一的"舞台"就像一个装饰的舞台,不同之处在于装饰区域和主要内容区域之间没有边界。
实用程序"阶段"是一个经过装饰的窗口,但是装饰很少。
这是设置JavaFXStage
样式的示例:
stage.initStyle(StageStyle.DECORATED); //stage.initStyle(StageStyle.UNDECORATED); //stage.initStyle(StageStyle.TRANSPARENT); //stage.initStyle(StageStyle.UNIFIED); //stage.initStyle(StageStyle.UTILITY);
实际上仅执行第一行。其余的被注释掉。它们仅在此处显示如何配置其他选项。
舞台全屏模式
我们可以通过Stage``setFullScreen()
方法将JavaFXStage
切换到全屏模式。请注意,除非在"舞台"上设置"场景",否则可能无法获得预期的结果(全屏模式下的窗口)。这是将JavaFX Stage设置为全屏模式的示例:
VBox vbox = new VBox(); Scene scene = new Scene(vbox); primaryStage.setScene(scene); primaryStage.setFullScreen(true); primaryStage.show();