这是笔者学习JavaFX官方文档的学习笔记,其顺序也大多按照文档的顺序进行。在GUI设计开始时,我们依然以“Hello World”作为第一个程序。
不过在正式开始之前,我们先要清楚JavaFX程序是如何构成的。一个窗口的层级结构如下:
- 顶级容器——舞台(Stage)
- 内容容器——场景(Scene)
- 图形节点——节点(Node)
- 子节点
- 图形节点——节点(Node)
- 内容容器——场景(Scene)
以上即是一个JavaFX的层级结构。了解了它的基本结构,我们就可以研究一下代码了:
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class HelloWorld extends Application {
@Override
public void start(Stage primaryStage) {
Button btn = new Button();
btn.setText(“Say 'Hello World'”);
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println(“Hello World!”);
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle(“Hello World!”);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
JavaFX的应用程序有一点非常不一样:它的主类需要继承自Application类,且start()方法是所有JavaFX应用程序的入口。也因此,当程序是通过JavaFX Packager工具打包时,main()方法就可以删去,因为JavaFX Package工具会将JavaFX Launcher嵌入到JAR文件中。但保留main()方法还是很有用的,这样就可以运行不带有JavaFX Launcher的JAR文件以及嵌入了JavaFX代码的Swing程序。
在本例中,root节点是一个StackPane对象,它是一个可以调整大小的layout节点。这就意味着在用户改变stage大小时,root节点可以随scene的大小变化而变化。节点又包含一个带文本的按钮子节点,按钮上添加了一个事件处理器(Event Handler),它在点击按钮时会向控制台输出信息。
程序运行效果如下:
本博客内容系笔者个人学习笔记,参考自JavaFX中文文档,如有侵权,请联系我删除。