JavaFX: Application流程和相关属性
Java 知识体系
Application流程:UI进程
1、创建工程HelloFX
按照JavaFX: IntelliJ 开发 Window 应用创建工程HelloFX,添加Application相同的方法覆盖Override
2、添加输出查看流程
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
System.out.println("HelloFX start(Stage primaryStage)");
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}
@Override
public void stop() throws Exception {
super.stop();
System.out.println("HelloFX stop()");
}
@Override
public void init() throws Exception {
super.init();
System.out.println("HelloFX init()");
}
public Main() {
super();
System.out.println("HelloFX Main()");
}
public static void main(String[] args) {
System.out.println("HelloFX main");
launch(args);
}
}
生命周期:HelloFX main -> HelloFX Main() -> HelloFX init() -> HelloFX start(Stage primaryStage) -> HelloFX stop()
HelloFX main
这个是Java程序入口;HelloFX Main()
构造函数,基本不用;HelloFX init()
通过名称就是初始化参数;HelloFX start(Stage primaryStage)
这个就是窗口和布局操作,默认创建了这个方法,其他可以不写;HelloFX stop()
程序退出调用。
3、当前进程查看Thread.currentThread().getName()
可以看到init中启动一个新线程JavaFX-Launcher
,所以UI更新在start中开始。
相关布局属性设置
对照项目代码查看图片,罗列一些属性设置:
FXMLLoader.load(getClass().getResource("sample.fxml"));
导入布局文件primaryStage.setTitle("Hello World");
设置标题primaryStage.setScene(new Scene(root, 300, 275));
设置画布Scene,并设置了画布的布局和宽高,不然拖动窗口stage有区域显示黑色primaryStage.show();
显示程序窗口,不然不会显示primaryStage.getIcons().add(new Image("/resources/icon/web_hi_res_512.png"));
设置左上角图标primaryStage.setIconified(true);
最小化窗口,相当于点击窗口上的最小化图标primaryStage.setMaximized(true);
最大化窗口,相当于点击窗口最大化图标primaryStage.close();
关闭窗口,相当于点击窗口关闭图标primaryStage.setWidth(400);
设置窗口宽度primaryStage.setHeight(300);
设置窗口高度primaryStage.setMaxWidth(1000);
设置窗口缩放的最大宽度;primaryStage.setMaxHeight(600);
设置窗口缩放的最大高度primaryStage.setMinWidth(200);
设置窗口缩放的最小宽度;primaryStage.setMinHeight(200);
设置窗口缩放的最小高度primaryStage.setFullScreen(true);
设置全屏显示,不过需要添加画布Scene,不然不生效,不过一般都会有这个。primaryStage.getWidth()
获取窗口的宽度;primaryStage.getHeight()
获取窗口的高度。没有设置窗口的Stage的宽高时,需要显示show()再获取。primaryStage.widthProperty().addListener
添加宽度变化监听;primaryStage.heightProperty().addListener
添加高度变化监听
primaryStage.widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
System.out.println("当前宽度:" + newValue.doubleValue());
}
});
primaryStage.heightProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
System.out.println("当前高度:" + newValue.doubleValue());
}
});
primaryStage.setOpacity(0.5);
设置透明度,0.5是半透明。primaryStage.setAlwaysOnTop(true);
置顶,界面在所有程序最上面