JavaFX 是 Java 製作 Content-Rich Client application 的 API。
Architecture
整個 API 的架構如下,包含了 2D 3D Graphic 以及 Web Engine,還有 GUI 的 UI 元件

重要的 API package 如下:
javafx.animation
產生 transition based animations,例如 javafx nodes 的 fill, fade, rotate, scale, translation
javafx.application
控制 JavaFX application 的 life cycle
javafx.css
對 JavaFX GUI application 增加類似 css styling 的功能
javafx.event
傳遞及處理事件
javafx.geometry
產生及控制 2D object
javafx.stage
JavaFX application 的最上層的 container class
javafx.scene
支援 scene graph 的類別,提供 canvas, chart, control, effect, image, input, layout, media, paint, shape, text, transform, web 等等功能
scene graph, node
JavaFX application 是以 Scene Graph 實作,建構 GUI application 的起點就是 scene graph,裡面是 nodes。
node 是一個 visual/graphical object,可能是
geometrical (graphical) objects
2D/3D 物件,例如 circle, rectangle, polygon
UI controls
例如 Button, Checkbox, Text Area
Containers
layut panes,例如 Border Pane, Grid Pane, Flow Pane
Media elements
例如 audio, video, image objects
scene graph 就是由很多 nodes 組合而成的,nodes 會有類似以下的階層式架構

類似這樣的架構,在實際上的 application 可能會是這樣

scene graph 裡面的每一個 node 都有單一一個 parent,唯一一個沒有 parents 的就是 root node。每一個 node 可以有多個 children,沒有 children 的 node 就是 leaf node,如果有 children 的 node 就稱為 branch node。
每一個 node instance 只能被加入到一個 scene graph 一次,node 可能會是 Effects, Opacity, Transforms, Event Handlers, Event Handlers, Application Specific States
Prism
prism 是高效硬體加速的 graphical pipeline,在 JavaFX 用來 render graphics,可 render 2D/3D graphics
為了產生 graphic,prism 會使用
- DirectX 11 on Windows 7,D3D11
- DirectX 12 on Windows 10/11,DX12 跟 DX11 相容,D3D11 最常見
- OpenGL on Mac and Linux, Embedded Systems.
在啟動 JavaFX application 時,加上 -Dprism.verbose=true 參數,可列印 prism 資訊。如果遇到沒有硬體加速的系統,會自動使用軟體 render。
GWT (Glass Windowing Toolkit)
JavaFX 的底層視窗系統抽象層,對平台視窗、輸入事件、螢幕等系統資源提供抽象,供 JavaFX API 使用,負責處理平台相關的:
視窗建立與管理(window creation)
輸入事件(滑鼠、鍵盤、觸控)
螢幕資訊(顯示器解析度、DPI 等)
視窗裝飾(標題列、邊框)
與作業系統的整合
針對不同 OS(Windows / macOS / Linux)有不同的實作
Quantum Toolkit
是 JavaFX 的主執行環境工具包:
它提供了一個 UI 執行緒(JavaFX Application Thread)
負責把 JavaFX API 呼叫分派到底層子系統(例如 Prism, Glass, Media, WebEngine 等),也就是抽象化 Prism, Glass, Media Engine, and Web Engine 底層元件
實作事件分派、場景圖(Scene Graph)渲染與更新調度
會將 Prism 及 GWT 整合在一起
Quantum Toolkit 的主要任務包括:
| 功能 | 說明 |
|---|---|
| 管理 JavaFX 主執行緒 | 即 JavaFX Application Thread |
| 事件循環(Event Loop)處理 | 包括滑鼠、鍵盤、動畫、定時器等事件 |
| 計畫場景更新(Pulse) | 定時發出 pulse 信號來觸發重繪 |
| 安排渲染與場景圖(Scene Graph)同步 | 確保 UI 狀態與畫面一致 |
WebView
JavaFX 可嵌入 html content 到 scene graph,透過 WebView 使用 Web Kit 處理這種 content。Web Kit 是 open source web browser engine,可支援 HTML5, CSS, JavaScript, DOM and SVG
WebView 裡面可以使用以下功能
- 從 local file 或是 remote URL render HTML content
- 支援 history,可往前或往後瀏覽
- reload content
- 為 web component 套用 effects
- 編輯 html
- 執行 javascript
- 處理事件
Media Engine
JavaFX Media engine 是使用 "Streamer" 這個 open source engine 實作,可支援 video/audio content playback
audio 支援 mp3, aac(*.acc *.m4a部分平台預設支援), wav, aiff,不支援 flac, ogg, wma,需要自己處理 GStreamer Plugin
video 支援 mp4 (*.mp4, *.m4v ) 視訊編碼是 h.264,聲音編碼 aac。flv 部分,視訊編碼 h.264 或 Sorenson,聲音編碼為 aac 或 mp3。不支援 WebM (vp8/vp9), mkv, avi, mov
提供三種 component
Media Object
Media Player
Media View
遇到不支援的格式時,會發生 MediaException
沒有留言:
張貼留言