介紹JavaFX功能與Swing的關(guān)系
JavaFX包含了許多強(qiáng)大的功能,它們都是Java SE不具備的,如圖表Charting,動畫,媒體播放,RSS/Atom等,于是程序員常常討論如何在Java中調(diào)用JavaFX功能。筆者文章純Java代碼調(diào)用JavaFX功能和JavaFX和Java之間的互操作性對此作過專題討論。在Stephen Chin的開源項(xiàng)目JFXtras***版本中, 提供了一個(gè)JavaFX的封裝類,可以在Swing應(yīng)用中顯示JavaFX的圖性元素(動畫,圖表等)。
這是個(gè)十分有用的功能,對廣大的Java(Swing)開發(fā)人員來說是個(gè)好消息。JFXtras的源代碼中包含了相關(guān)的演示程序(SceneToJComponentScene.fx和 SceneToJComponentTest.java)。我把這個(gè)程序修改了一下,以便說明問題。
- /*
- *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的變量值,實(shí)際中這會損失比較多的性能,所以我們可以從Java代碼中主動把數(shù)據(jù)變化通知JavaFX。這需要一種從Java調(diào)用javafx的技巧,可以參見本人文章:用Java代碼調(diào)用JavaFX功能。
2) 在Swing程序中調(diào)用JavaFX是可行的,那么應(yīng)該怎樣編譯和運(yùn)行這樣的程序呢。其實(shí),JavaFX功能也就是一些jar文件,因此和Java的結(jié)合方式還是比較簡單的。編譯的方法主要有兩種,一種就是用JavaFX 的編譯器javafxc來編譯Java和JavaFX的代碼。第二種就是用javafxc編譯JavaFX代碼,用javac編譯java代碼。運(yùn)行程序的時(shí)候,我們可以選擇javafx或java命令即可,可以參見本人文章:JavaFX技巧:純Java代碼調(diào)用JavaFX的例子的詳細(xì)說明。
【編輯推薦】