理解javafx 架構
● 場景圖(Scene Graph)
● JavaFX功能的公開API(Java Public APIs for JavaFX Features)
● 圖形系統(Graphics System)
● Glass窗體工具包(Glass Windowing Toolkit)
● 多媒體和圖像(Media and Images)
● Web組件(Web Component)
● CSS
● UI控件(UI Controls)
● 布局(Layout)
● 2-D和3-D轉換(2-D and 3-D Transformations)
● 視覺特效(Visual Effects)
場景圖(Scene Graph)
- 它是構建JavaFX應用的入口。它是一個層級結構的節點樹,表示了所有用戶界面的視覺元素。它可以處理輸入,並且可以被渲染。
在場景圖中的一個元素被稱為一個節點(Node)。每個節點都有一個ID、樣式類和包圍盒(bounding volume)。除了根節點之外 ---- 簡而言之 根據節點值實現渲染 - 以下特性
● 效果(Effects),例如模糊和陰影
● 不透明度(Opacity)
● 變換(Transforms)
● 事件處理器(Event handlers,例如鼠標、鍵盤和輸入法)
● 應用相關的狀態(Application-specific state)
用代碼實際理解基本使用過程
- 繼承application 覆蓋 start() 方法
- 我在代碼里說明
package demo;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class P1 extends Application{
@Override
public void start(Stage primaryStage) throws Exception {
//構建面板
StackPane root = new StackPane();
//創建場景
Scene scene = new Scene(root);
//加入舞台
primaryStage.setHeight(400);
primaryStage.setWidth(500);
primaryStage.setResizable(false);
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* 嵌入了JavaFX代碼的Swing應用程序仍需要main()方法
* @param args
*/
public static void main(String[] args) {
launch(args);
}
}
- 硬編碼的方式創建應用(不推薦)
下面 在demo中創建一個 text 組件 button 組件
package demo;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class P1 extends Application {
private Button btn;
private Text textFiled;
@Override
public void start(Stage primaryStage) throws Exception {
// 構建面板
AnchorPane root = new AnchorPane();
// 創建場景
Scene scene = new Scene(root);
// 組件初始化
textFiled = new Text("fx");
btn = new Button("cilck");
// 綁定按鈕事件
btn.setOnAction((e) -> {
textFiled.setText("按鈕被點擊");
});
// 加入面板
root.getChildren().addAll(textFiled,btn);
AnchorPane.setLeftAnchor(btn,100.0);
AnchorPane.setBottomAnchor(btn,100.0);
AnchorPane.setTopAnchor(textFiled, (double) 20);
AnchorPane.setLeftAnchor(textFiled, (double) 20);
// 加入舞台
primaryStage.setHeight(400);
primaryStage.setWidth(500);
primaryStage.setResizable(false);
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* 嵌入了JavaFX代碼的Swing應用程序仍需要main()方法
*
* @param args
*/
public static void main(String[] args) {
launch(args);
}
}