原文地址http://download.oracle.com/javafx/2.0/ui_controls/overview.htm
JavaFX控件是通過API在場景圖形中使用結點構建的,所以它們可以使用javaFX平臺的富視覺特點。由於javaFX API是完全用Java語言實現的,所以可以輕鬆將javaFX UI 控件集成進已存在的Java應用中。
JavaFX 2.0中支持的UI控件
UI控件的構造類位於API的javafx.scene.control
包中。
控件列表包括了你可能很熟悉的用Java開發客戶端應用的典型UI組件。不過,JavaFX 2.0 SDK引入了新的Java UI 控件,比如TitledPane
和TableView
.
Figure 1-1 是一副屏幕截圖,有三個TitledPane
元素和一個社交類型列表,並且列表可以滑入
(retract)和滑出 (extend).
可以從 API文檔查看全部UI控件。
UI 控件類比Control類提供了更多的變量和方法,這樣就能以直觀的方式支持典型的用戶交互。你可以使用層疊樣式表(CSS)爲你的UI組件設計特殊樣式。對於某些個別任務,還可能要繼承Control
類來創建定製的UI 組件,或者使用Skin
接口爲已存在的控件定義一個新皮膚。
特性和效果
由於javafx.scene.control包中的
UI 控件都繼承了 Node
類,所以它們可以和場景圖形的渲染、動畫、變換及動畫過度進行整合。
考慮創建一個按鈕,爲它添加倒影並通過時間線修改它的透明度來讓它閃動。
Figure 1-2 展示了這個按鈕的三個不同時間線上的狀態。左邊的圖像是不透明度設爲1.0時
,中間的圖像是不透明度 0.8
,最右邊的不透明度是0.5
.
通過使用JavaFX API只用少量代碼就能實現這個任務。
Example 1-1 創建了一個無限的時間線並開始了它,裏面有一個600毫秒的關鍵幀設置按鈕的不透明度從默認值(1.0)向 0.0變化。setAutoReverse
使得時間線可以自動反向。
Example 1-1 Creating an Animated Button
import javafx.animation.KeyFrame; import javafx.animation.KeyValue; import javafx.animation.Timeline; import javafx.util.Duration; import javafx.scene.control.Button; import javafx.scene.text.Font; import javafx.scene.effect.Reflection; ... Button button = new Button(); button.setText("OK"); button.setFont(new Font("Tahoma", 24)); button.setEffect(new Reflection()); final Timeline timeline = new Timeline(); timeline.setCycleCount(Timeline.INDEFINITE); timeline.setAutoReverse(true); final KeyValue kv = new KeyValue(button.opacityProperty(), 0); final KeyFrame kf = new KeyFrame(Duration.millis(600), kv); timeline.getKeyFrames().add(kf); timeline.play(); ...
你也可以應用 javafx.scene.effect
包中的其他效果,比如shadow, lighting, 或者 motion blur.
爲UI控件添加CSS裝飾
通過定義自己的Cascading Style Sheets (CSS)可以定製內建的UI控件。在JavaFX 應用中使用CSS很像在HTML中使用,因爲都必須遵循相同的CSS 規範。控件的視覺效果由.css文件定義,見代碼Example 1-2 .
Example 1-2 Defining Styles for UI Controls in the CSS File
/*controlStyle.css */ .scene{ -fx-font: 14pt "Cambria Bold"; -fx-color: #e79423; -fx-background: #67644e; } .button{ -fx-text-fill: #006464; -fx-background-color: #e79423; -fx-border-radius: 20; -fx-background-radius: 20; -fx-padding: 5; }
可以通過Scene類中的 getStylesheets
方法應用該效果,見Example
1-3 .
Example 1-3 Applying CSS
Scene scene = new Scene(); scene.getStylesheets().add("uicontrolssample/controlStyle.css");
//譯者注:添加外部css文件時,即使文件和類在同意目錄下,也要加上css所在的包名。
另外,你可以通過使用setStyle方法直接定義控件風格。
Example
1-4 中的 -fx-base
屬性爲場景中新增的雙態按鈕定義,它重寫了CSS文件中對應的屬性。
Example 1-4 Defining the Style of a Toggle Button in the JavaFX Application
ToggleButton tb3 = new ToggleButton ("I don't know"); tb3.setStyle("-fx-base: #ed1c24;");
Figure 1-3 展示了雙態按鈕的效果。
Figure 1-3 Applying CSS Style to a Toggle Button
Description of "Figure 1-3 Applying CSS Style to a Toggle Button"
圖表
除了爲用戶接口提供典型元素外, JavaFX SDK在 javafx.scene.chart包中
提供了預置圖表。以下類型圖表已經可以支持了:area chart, bar chart, bubble chart, line chart, pie chart, and scatter chart。一個圖表可以包含幾個系類的數據。
Figure 1-4 是一個進口水果餅圖。
和其他Java客戶端工具不同,使用JavaFX SDK 只需要在應用中添加幾行代碼就能構建這樣的圖表。你也可以定義一系列的顏色表和風格、應用視覺效果、處理鼠標事件、創建動畫等。
來 Using JavaFX Charts 瞭解更多的圖表特性和功能信息。
集成JavaFX 2.0 UI 控件和 Swing
可以將 JavaFX UI 控件集成進已存在的用Swing構建的Java客戶端應用。
要集成JavaFX內容和Swing,請安裝以下步驟:
-
將JavaFX UI 控件一個一個地添加到
javafx.scene.Scene
對象中的佈局容器中,比如一個group. -
把
Scene
對象加入Swing 應用.
即使把一個單獨的JavaFX 2.0 控件加入到已存在的Swing代碼中也要做上面的兩個步驟。
儘管它們被集成進了Swing程序,JavaFX 2.0 UI 控件也依然被菱鏡圖形庫(Prism graphical library)渲染 ,並具有全部的高級渲染能力。
到第七回 瞭解更多二者的集成信息。