介紹JavaFX功能與Swing的關系
JavaFX包含了許多強大的功能,它們都是Java SE不具備的,如圖表Charting,動畫,媒體播放,RSS/Atom等,于是程序員常常討論如何在Java中調用JavaFX功能。筆者文章純Java代碼調用JavaFX功能和JavaFX和Java之間的互操作性對此作過專題討論。在Stephen Chin的開源項目JFXtras***版本中, 提供了一個JavaFX的封裝類,可以在Swing應用中顯示JavaFX的圖性元素(動畫,圖表等)。
這是個十分有用的功能,對廣大的Java(Swing)開發(fā)人員來說是個好消息。JFXtras的源代碼中包含了相關的演示程序(SceneToJComponentScene.fx和 SceneToJComponentTest.java)。我把這個程序修改了一下,以便說明問題。
- /*
- *MyScene.fxhttp://www.javafxblogs.com
- *@authorHenryZhang
- */
- packageswingtest;
- importjavafx.scene.Scene;
- importjavafx.scene.text.*;
- importjavafx.scene.paint.*;
- importjavafx.scene.shape.Rectangle;
- importjavafx.animation.Timeline;
- importjavafx.animation.KeyFrame;
- defw=500;
- defh=400;
- publicclassMySceneextendsScene{
- varxx=w/3;
- varyy=h/2;
- varrotate=0;
- vartext="";
- vartl=Timeline{
- repeatCount:Timeline.INDEFINITE
- keyFrames:[
- KeyFrame{
- time:70ms
- action:function(){
- text=JavaFXToSwingTest.tf.getText();
- rotate=(rotate+5)mod360;
- }
- }
- ]
- }
- overridevarcontent=[
- Rectangle{
- width:w,height:h
- fill:Color.BLUE
- },
- Text{
- font:Font{
- size:24
- }
- layoutX:bindxx
- layoutY:bindyy
- rotate:bindrotate
- content:bindtext
- fill:Color.YELLOW
- }
- ];
- init{tl.play();}
- }
1) 在上述程序中,我們用JavaFX的代碼去輪詢Java的變量值,實際中這會損失比較多的性能,所以我們可以從Java代碼中主動把數(shù)據(jù)變化通知JavaFX。這需要一種從Java調用javafx的技巧,可以參見本人文章:用Java代碼調用JavaFX功能。
2) 在Swing程序中調用JavaFX是可行的,那么應該怎樣編譯和運行這樣的程序呢。其實,JavaFX功能也就是一些jar文件,因此和Java的結合方式還是比較簡單的。編譯的方法主要有兩種,一種就是用JavaFX 的編譯器javafxc來編譯Java和JavaFX的代碼。第二種就是用javafxc編譯JavaFX代碼,用javac編譯java代碼。運行程序的時候,我們可以選擇javafx或java命令即可,可以參見本人文章:JavaFX技巧:純Java代碼調用JavaFX的例子的詳細說明。
【編輯推薦】