0
点赞
收藏
分享

微信扫一扫

JavaFX(二、Stage类型和模态以及Platform)

以沫的窝 2021-09-27 阅读 80

Stage类型

public class 窗体类型 extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {

        Stage s1=new Stage();
        s1.setTitle("s1");
        s1.initStyle(StageStyle.DECORATED);//默认形式,有最大最小按钮等
        s1.show();

        Stage s2=new Stage();
        s2.setTitle("s2");
        s2.initStyle(StageStyle.TRANSPARENT);//透明窗体
        s2.show();

        Stage s3=new Stage();
        s3.setTitle("s3");
        s3.initStyle(StageStyle.UNDECORATED);//白色窗体,效果上和透明窗体几乎无区别
        s3.show();

        Stage s4=new Stage();
        s4.setTitle("s4");
        s4.initStyle(StageStyle.UNIFIED);//有最大最小等按钮,但是标题栏装饰没有了
        s4.show();


        Stage s5=new Stage();
        s5.setTitle("s5");
        s5.initStyle(StageStyle.UTILITY);//只有关闭按钮,有标题栏装饰
        s5.show();


        //关闭所有窗体
        Platform.exit();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

模态框

应用模态框

public class 模态化窗体一 extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {

        Stage s1=new Stage();
        s1.setTitle("s1");


        Stage s2=new Stage();
        s2.setTitle("s2");
        //设置应用模态,则归属于一个应用的模态框不关闭的情况下,其他窗体无法操作
        s2.initModality(Modality.APPLICATION_MODAL);
        s1.show();
        s2.show();


    }

    public static void main(String[] args) {
        launch(args);
    }
}

windows模态框

public class 模态化窗体二 extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {

        Stage s1=new Stage();
        s1.setTitle("s1");


        Stage s2=new Stage();
        s2.setTitle("s2");

        //windows模态则不会阻止其他窗体操作,因为顾名思义针对系统的,所以需要绑定窗体关系
        s2.initModality(Modality.WINDOW_MODAL);
        //告知:s2的拥有着是s1
        s2.initOwner(s1);
        s1.show();
        s2.show();

    }

    public static void main(String[] args) {
        launch(args);
    }
}

Platform的使用

public class Platform类的使用 extends Application{

    @Override
    public void start(Stage primaryStage) throws Exception {
        System.out.println("start的线程 ="+Thread.currentThread().getName()); //JavaFX Application Thread
        //虽然是回调,而且最后执行,但是内部线程也是UI线程,作用是,线程空闲时候,更新UI,但是仍不可做频繁大量的UI更新
        Platform.runLater(() -> {
            System.out.println("run的线程 ="+Thread.currentThread().getName());//JavaFX Application Thread
        });
        //会先于runLater回调执行
        System.out.println("执行");

        //该方法设置flase,则即使关闭窗体,程序也没结束
        Platform.setImplicitExit(false);
        primaryStage.show();

        //检测系统是否支持3D,当然还有其他检测不再赘述
        System.out.println(Platform.isSupported(ConditionalFeature.SCENE3D));//true
        //关闭程序,这样才能彻底关闭程序
        Platform.exit();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
举报

相关推荐

0 条评论