Stage

■ 关于Stage

一个Stage类(javafx.stage.Stage)对象代表一个JavaFX的窗体
每一个stage都只包含一个scene,这个scene即代表窗体内所显示的内容

当一个JavaFX程序启动时,后台会创建一个Stage对象,并将其传递给自己实现的Application类的start()方法
该stage对象(primaryStage)代表程序的主窗体,也可根据情况,在程序的生命周期内创建多个自定义窗体
注:这里所说的窗体,都仅限于同一个javafx程序进程下的窗体

■ 创建Stage

Stage stage = new Stage();  //创建Stage

■ 显示Scene

仅仅创建Stage类对象无法显示窗体,需要调用show()或showAndWait()方法

Stage stage = new Stage();
stage.show();
// stage.showAndWait();

show()和showAndWait()的区别
show(): 显示对应窗体,后面的代码可以继续执行
showAndWait(): 显示对应窗体,该方法后面的代码不会被执行,除非关闭该窗体; 简单讲就是代码执行到showAndWait()时,就会停到这个地方,窗体关闭了,后面的代码才会继续执行

■ Scene

如果要在窗体里显示组件,一定要为scene指定组件,并为stage设定scene
这样,当stage执行show()方法时,才会将scene的内容显示出来

VBox vBox = new VBox(new Label("A JavaFX Label")); //创建组件
Scene scene = new Scene(vBox); //为scene指定该组件
Stage stage = new Stage();
stage.setScene(scene); //为stage设定scene
stage.show();

■ Title

通过setTitle()方法为窗体设定标题

stage.setTitle("JavaFX Stage Window Title");  //为窗体设定标题

■ Position

通过setX()和setY()方法为窗体设定显示坐标,坐标点是窗体的左上方一点的坐标点
通常设定坐标点时,需要同时为窗体设定长和宽,否则窗体会非常的小

Stage stage = new Stage();
stage.setX(50);
stage.setY(50)

■ Width和Height

通过setWidth()和setHeight()方法为窗体设置长和宽

Stage stage = new Stage();
stage.setWidth(600);
stage.setHeight(300);

■ Modality

modality即窗口模态,它可以决定当前窗体是否可以block其他窗体
通过initModality()方法来设置窗体模态

Modality.APPLICATION_MODAL: 阻止用户访问所有其他的窗体,直到该窗体关闭
Modality.WINDOW_MODAL: 仅阻止用户访问所有该窗体的owner窗体,直到该窗体关闭
Modality.NONE: 不会阻止用户访问任何窗体
应用场景:
Modality.APPLICATION_MODALModality.WINDOW_MODAL主要用于程序中母窗体点击按钮弹出对话框,消息框之类的场景,关闭了对话框和消息框之后,才可以对母窗体继续进行操作
 Modality.NONE主要用于类似浏览器打开网页这种方式,可以关闭访问任意曾经打开的tab页

primaryStage.setTitle("JavaFX App");
Stage stage = new Stage();
stage.initModality(Modality.APPLICATION_MODAL);  //stage对应窗体会阻止用户访问primaryStage对应的窗体,除非stage对应窗体关闭
//stage.initModality(Modality.WINDOW_MODAL);  
//stage.initModality(Modality.NONE);
primaryStage.show();
stage.showAndWait();

■ Owner

一个窗体可以是另一个窗体的owner
通过initOwner()方法为窗体设置owner

primaryStage.setTitle("JavaFX App");
Stage stage = new Stage();
stage.initModality(Modality.WINDOW_MODAL);
stage.initOwner(primaryStage);
primaryStage.show();
stage.showAndWait();

■ Style

窗体也可以定义不同的样式
通过initStyle()设置样式
DECORATED: 显示标准的窗体和白色背景,并附带操作系统装饰栏(包括标题栏,最小化,最大化和关闭按钮)和白色背景
UNDECORATED: 显示标准的窗体和白色背景,不附带操作系统装饰栏
TRANSPARENT: 透明窗体
UNIFIED: 类似DECORATED,区别就是操作系统装饰栏和窗体内容之间不显示边界线
UTILITY: 类似DECORATED,区别就是操作系统装饰栏只有关闭按钮

stage.initStyle(StageStyle.DECORATED);
//stage.initStyle(StageStyle.UNDECORATED);
//stage.initStyle(StageStyle.TRANSPARENT);
//stage.initStyle(StageStyle.UNIFIED);
//stage.initStyle(StageStyle.UTILITY);

■ Full Screen

窗体也可以设置成全屏模式
通过setFullScreen()方法设置窗体的全屏模式
注: 设置全屏模式需要为stage设置scene,否则不会生效

VBox vbox = new VBox();
Scene scene = new Scene(vbox);
primaryStage.setScene(scene);
primaryStage.setFullScreen(true);
primaryStage.show();

■ Event

Stage生命周期中包含以下事件:

  • Close Request
  • Hiding
  • Hidden
  • Showing
  • Shown

□ Close Stage Event Listener

当点击窗体右上角的关闭按钮时,触发该事件

primaryStage.setOnCloseRequest((event) -> {
    System.out.println("Closing Stage");
});

□ Hiding Stage Event Listener

当stage正在被隐藏但还没完成隐藏时,触发该事件

primaryStage.setOnHiding((event) -> {
    System.out.println("Hiding Stage");
});

□ Hidden Stage Event Listener

当stage完成隐藏时,触发该事件

primaryStage.setOnHidden((event) -> {
    System.out.println("Stage hidden");
});

□ Showing Stage Event Listener

当stage正在被显示但还没完成显示时,触发该事件

primaryStage.setOnShowing((event) -> {
    System.out.println("Showing Stage");
});

□ Shown Stage Event Listener

当stage完成显示之后,触发该事件

primaryStage.setOnShown((event) -> {
    System.out.println("Stage Shown");
});

□ Stage Keyboard Events Listener

当光标放在窗体时,Stage可以捕获任何键盘上操作

primaryStage.addEventHandler(KeyEvent.KEY_PRESSED,  (event) -> {
    System.out.println("Key pressed: " + event.toString());

    switch(event.getCode().getCode()) {
        case 27 : { // 27 = ESC key
            primaryStage.close();
            break;
        }
        case 10 : { // 10 = Return
            primaryStage.setWidth( primaryStage.getWidth() * 2);
        }
        default:  {
            System.out.println("Unrecognized key");
        }
    }
});
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值