工具类:Platform、Screen

关于屏幕信息和程序偷留的内容

Platform

对于一些不复杂的工作,可以使用Platform的runLater()方法。在方法的形参中使用内部类实现Runnable的run方法,这个方法会在空闲时执行。代码实现如下:

1
2
3
4
5
6
7
8
9
10
11
public void start(Stage primaryStage) throws Exception {
//队列,JavaFX Application Thread空闲的时候执行这个方法
Platform.runLater(new Runnable() {
public void run() {
System.out.println("run方法里面的线程"+Thread.currentThread().getName());
}
});

System.out.println("run方法外面的线程"+Thread.currentThread().getName());

}

关于窗口关闭,[[Stage常用属性#^e5e684|前面]]提到了怎么批量关闭,但是如果我想要所有窗口关闭但是程序不结束,那么使用setImplicitExit方法,如果使用了该方法则关闭程序需要使用exit方法,且exit方法会调用stop方法。例如

1
2
3
4
5
6
7
8
9
10
11
12
public void start(Stage primaryStage) throws Exception {
/*
* 当Platform.setImplicitExit()参数为false时,所有窗口关闭完后不默认关闭程序
* 需要调用Platform.exit()进行关闭
*/
Platform.setImplicitExit(false);
primaryStage.show();
Platform.exit();

public void stop() {
System.out.println("stop被调用");
}

当我们需要检查电脑是否支持xxx时,可以使用isSupported,通过参数中的枚举项传入要查询的功能。例如

1
2
//检查电脑是否支持xxx
System.out.println("是否支持SCENE3D:"+Platform.isSupported(ConditionalFeature.SCENE3D));

Screen

关于屏幕的信息,可以通过Screen获取到。在获取信息之前需要知道一点知识,屏幕真实大小于可见大小可能不一样。好的,下面的代码将获取屏幕的位置、大小、DPI信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public void start(Stage primaryStage) throws Exception {
Screen scr=Screen.getPrimary();

Rectangle2D rec1=scr.getBounds();
Rectangle2D rec2=scr.getVisualBounds();

//全部屏幕的宽高和坐标
System.out.println("左上角x:"+rec1.getMinX()+" 左上角Y:"+rec1.getMinY());
System.out.println("右下角x:"+rec1.getMaxX()+" 右下角Y:"+rec1.getMaxY());
System.out.println("宽度:"+rec1.getWidth()+" 高度:"+rec1.getHeight());

//可见屏幕的宽高和坐标
System.out.println("左上角x:"+rec2.getMinX()+" 左上角Y:"+rec2.getMinY());
System.out.println("右下角x:"+rec2.getMaxX()+" 右下角Y:"+rec2.getMaxY());
System.out.println("宽度:"+rec2.getWidth()+" 高度:"+rec2.getHeight());

//获取屏幕DPI
System.out.println("当前屏幕dpi:"+scr.getDpi());

Platform.exit();

}