JavaFX 1.0入門

 

Sun終於在上週四(04-12-2008)發佈了我們期盼已久的JavaFX 1.0版本。Sun想借助JavaFX這個強大的開發平臺,把Java在服務器端的輝煌擴大到包括瀏覽器和桌面在內的客戶端領域。這樣,Sun就可以在競爭激烈的RIA(Rich Internet Applictions)領域中和AdobeFlexMicrosoftSilverlight一較高下。筆者以前針對JavaFx0.0.2版本寫過一篇短文(http://blog.csdn.net/carlwu/archive/2008/05/09/2419776.aspx),指出了JavaFX的四點不足之處。但從剛剛發佈的JavaFX1.0來看,Sun改進了其中的三個缺點,即在JavaFX開發工具、JavaFX對多媒體影像的支持、JavaFX的網絡部署等方面有了很大的進步。所以,我覺得JavaFX1.0現在雖然還稍稍落後於SilverlightFlex,但JavaFX可能會對我們的實際項目有所幫助,尤其對我們廣大的Java開發者而言。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

SunJavaFX的簡單介紹請參見http://www.javafx.com/launch/win-player.jsp Sun提供了幾段令人印象深刻的演示。其中,JavaFXPhotoshop的集成對我們開發者來說可能關係不大,JavaFX媒體播放器、JavaFX的拖拽功能及JavaFX3D圖片展示可能會另我們耳目一新。Sun直言,JavaFX將對我們Java開發者、Web開發者及圖像設計者會有所裨益。我也衷心希望Sun藉助JavaFX平臺在RIA領域能有所作爲。

下面我們就開始我們的JavaFX的入門之旅,簡單領略一下JavaFX的魅力。

  1. 準備工作

首先,您得從http://www.javafx.com/downloads/windows.jsp下載NetBeans 6.5,同時升級您的JDK到最新版本(我的本機爲JDK6u11)

  1. 請打開NetBeans,新建一個項目,項目類型選擇JavaFX,然後輸入項目名稱HelloJavaFX,同時創建主項目文件hellojavafx.Main

  2. NetBeans會創建一個缺省的JavaFX項目,我們打開Main.fx,將下面的源代碼覆蓋NetBeans自動生成的代碼:

  1. /*
  2.  * Main.fx
  3.  *
  4.  * Created on 2008-12-9, 17:05:46
  5.  */
  6. package hellojavafx;
  7. import javafx.animation.Interpolator;
  8. import javafx.animation.KeyFrame;
  9. import javafx.animation.Timeline;
  10. import javafx.scene.effect.DropShadow;
  11. import javafx.scene.paint.Color;
  12. import javafx.scene.paint.RadialGradient;
  13. import javafx.scene.paint.Stop;
  14. import javafx.scene.Scene;
  15. import javafx.scene.shape.Circle;
  16. import javafx.scene.text.Font;
  17. import javafx.scene.text.Text;
  18. import javafx.scene.text.TextAlignment;
  19. import javafx.scene.transform.Scale;
  20. import javafx.stage.Stage;
  21. /**
  22.  * @author carlwu
  23.  */
  24. var scale = 1.0;
  25. var color = Color.YELLOW;
  26. Timeline {
  27.     repeatCount: Timeline.INDEFINITE
  28.     keyFrames: [
  29.         KeyFrame {
  30.             time: 5s
  31.             canSkip: true
  32.             values: [
  33.                 scale => -1.0 tween Interpolator.EASEBOTH
  34.                 color => Color.GREEN
  35.             ] // values
  36.         } // KeyFrame
  37.     ] // keyFrames
  38. }.play();
  39. Stage {
  40.     title: "/u6211/u7684/u7b2c/u4e00/u4e2aJavaFX"
  41.     width: 250
  42.     height: 250
  43.     scene: Scene {
  44.         content: [
  45.             Circle {
  46.                 centerX: 100,
  47.                 centerY: 100
  48.                 radius: 90
  49.                 fill: RadialGradient {
  50.                     centerX: 75
  51.                     centerY: 75
  52.                     radius: 90
  53.                     proportional: false
  54.                     stops: [
  55.                         Stop {
  56.                             offset: 0.0
  57.                             color: Color.BLUE},
  58.                         Stop {
  59.                             offset: 1.0
  60.                             color: Color.YELLOW}
  61.                     ] // stops
  62.                 } // RadialGradient
  63.                 radius: 90
  64.                 fill: Color.RED
  65.             }
  66.             Text {
  67.                 font: Font {
  68.                     size: 24
  69.                 }
  70.                 x: 20,
  71.                 y: 90
  72.                 textAlignment: TextAlignment.CENTER
  73.                 content:"/u6b22/u8fce/u8fdb/u5165 /nJavaFX /u7684/u4e16/u754c"
  74.                 fill: bind color
  75.                 effect: DropShadow {
  76.                     offsetX: 10
  77.                     offsetY:10
  78.                     color: Color.color(0.10.30.1)
  79.                 };  // DropShadow
  80.                 transforms: Scale{
  81.                     x: 1
  82.                     y: bind scale
  83.                     pivotX: 100,
  84.                     pivotY: 100
  85.                 } // Scale
  86.             } // Text
  87.         ]
  88.     }
  89. }

然後,右擊Main.fx文件,先編譯然後運行該文件,運行效果如下:

 

 

您會看到窗口上的兩行字的動畫效果。上面的代碼非常簡單,其中,Timeline類似於Flash中的時間線的概念,隨着時間線的推移,關鍵幀發生變化,所以產生動畫效果。另外,Stage就相當於以前Swing中的Window,是最頂級的容器;Stage中包含了次級的容器Scene 的實例scene,這相當於以前的Graphics畫布對象,scene對象中又包含了一個Circle對象和Text對象,代碼的結構還是相當清楚的。JavaFX是一種聲明式的腳本語言,但它不是動態語言。關於JavaFX腳本語言的細節及API,請參考SunJavaFX教程http://java.sun.com/javafx/1/tutorials/core/,在此我就不多說了。

4. 關於JavaFX的部署

JavaFX模糊了桌面應用和網絡應用的概念,就上面的簡單示例來說,請在資源管理器中打開該項目所在的目錄,您會發現該目錄下有一個dist的子目錄,子目錄中包含了一個HelloJavaFX.jnlpJava Web Start的啓動文件,如果您雙擊該文件,它就會啓動Java Web Start,您此時的應用就是一個桌面應用程序;另外,dist子目錄下還有一個HelloJavaFX.html文件,如果您在瀏覽器中打開這個文件,您應看到如下圖所示的效果:

 

 

 5. JavaFX小結

通過上面簡單的示例,我們可以看到,JavaFXSun公司下一代RIA技術的代表,它在多媒體的支持、IDE集成、拖拽功能、對移動開發的支持及和其它技術的集成上面,都有可圈可點之處。如果您對RIA開發有興趣,不妨抽時間可以學習一下JavaFX。另外,我覺得Sun還可以在IDE上多下工夫,真正做到“所見即所得”的效果,雖然現在JavaFX有預覽的功能。另外,EclipseJavaFX1.0插件也不知何時能推出?

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章