自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用純Java代碼調用JavaFX的功能

開發(fā) 后端
在JavaFX 1.0發(fā)布之后,本人撰寫的文章講述JavaFX和Java之間的互操作性。文中總結了3種從Java調用JavaFX的方法。本文將講的是用純Java代碼調用JavaFX的功能。

從Java調用JavaFX的三種方法分別為:

1. 用ScriptEngineManager類。這是基于JSR-223規(guī)范的java腳本API( scripting API)。可以在java程序中運行一些腳本,如 JavaFX script, javascript等。

2. 通過JavaFX reflection API。這是JavaFX提供的反射API,幾乎可以調用所有的JavaFX類。

3. 先用JavaFX類實現(xiàn)一個Java的interface,然后Java程序可以通過這個interface來調用JavaFX的功能。這中間的interface起了個橋梁的作用。 

第三種方法應該是比較“正規(guī)”而且“優(yōu)美”的調用方式。但是也有一點不足:程序代碼的入口必須從JavaFX啟動。這是因為JavaFX程序比較容易生成JavaFX類的實例,從而可以供Java方使用??墒俏覀冇袝r會碰到一些特定的情況,需要從Java端啟動代碼。例如,如果你已經(jīng)有了一個較完整的Java程序,你需要用調用JavaFX的某些功能,這時候較好的方法是把Java作為程序的入口。為了解決這個問題,我把第2和第3種方法作了融合,大家可以看看下面的例子。

假定我們需要從Java中調用JavaFX的圖表(charting)功能。我們首先用JavaFX reflection API生成JavaFX類的實例。然后我們再通過java的interface來使用它。因此,我們先定義一個Java的interface:

  1. /*    
  2.  * JavaInterface.java    
  3.  *    
  4.  * @author Henry Zhang  http://www.javafxblogs.com    
  5.  */    
  6. package javatest;     
  7. public interface JavaInterface {     
  8.   public void addData(String name, float data);     
  9.   public void showChart();     
  10. }    
  11.  
  12. /*  
  13.  * JavaInterface.java  
  14.  *  
  15.  * @author Henry Zhang  http://www.javafxblogs.com  
  16.  */  
  17. package javatest;  
  18. public interface JavaInterface {  
  19.   public void addData(String name, float data);  
  20.   public void showChart();  

下一步是創(chuàng)建JavaFX類MyChart來實現(xiàn)這個interface:

  1. /*    
  2.  * MyChart.fx    
  3.  *    
  4.  * @author Henry Zhang http://www.javafxblogs.com    
  5.  */    
  6. package javatest;     
  7.     
  8. import javafx.scene.chart.PieChart;     
  9. import javafx.scene.Scene;     
  10. import javafx.scene.text.Font;     
  11. import javafx.scene.text.Text;     
  12. import javafx.stage.Stage;     
  13. import javafx.scene.chart.PieChart3D;     
  14.     
  15. public class MyChart extends JavaInterface {     
  16.   var chartData :  PieChart.Data[] = [];     
  17.     
  18.   public override function addData( l:String, v: Number):Void {     
  19. var llabelString = l;     
  20.     
  21. var data =  PieChart.Data {     
  22.   label : l     
  23.   value : v     
  24.   action: function() {     
  25. println("{labelString} clicked!");     
  26.   }     
  27.  } ;     
  28.     
  29. insert data into chartData;     
  30.   }     
  31.     
  32.   public override function showChart() : Void {     
  33. var chart =     
  34.   PieChart3D {     
  35. data : chartData     
  36. pieThickness: 25    
  37. pieLabelFont: Font{ size: 9 };     
  38. pieToLabelLineOneLength: 10    
  39. pieToLabelLineTwoLength : 20    
  40. pieLabelVisible: true    
  41. pieValueVisible: true    
  42. translateY: -50    
  43.  };     
  44.     
  45. Stage {     
  46.   title: "PieChart Window"    
  47.   width: 520    
  48.   height: 300    
  49.   scene: Scene {     
  50. content: [     
  51.   Text {     
  52. font : Font {     
  53. size : 16    
  54.    }     
  55. x: 200    
  56. y: 20    
  57. content: "Pie Chart"    
  58.   },     
  59.   chart     
  60. ]     
  61.   }     
  62. }     
  63.   }     
  64. }    
  65.  
  66. /*  
  67.  * MyChart.fx  
  68.  *  
  69.  * @author Henry Zhang http://www.javafxblogs.com  
  70.  */  
  71. package javatest;  
  72.  
  73. import javafx.scene.chart.PieChart;  
  74. import javafx.scene.Scene;  
  75. import javafx.scene.text.Font;  
  76. import javafx.scene.text.Text;  
  77. import javafx.stage.Stage;  
  78. import javafx.scene.chart.PieChart3D;  
  79.  
  80. public class MyChart extends JavaInterface {  
  81.   var chartData :  PieChart.Data[] = [];  
  82.  
  83.   public override function addData( l:String, v: Number):Void {  
  84. var llabelString = l;  
  85.  
  86. var data =  PieChart.Data {  
  87.   label : l  
  88.   value : v  
  89.   action: function() {  
  90. println("{labelString} clicked!");  
  91.   }  
  92.  } ;  
  93.  
  94. insert data into chartData;  
  95.   }  
  96.  
  97.   public override function showChart() : Void {  
  98. var chart =  
  99.   PieChart3D {  
  100. data : chartData  
  101. pieThickness: 25  
  102. pieLabelFont: Font{ size: 9 };  
  103. pieToLabelLineOneLength: 10  
  104. pieToLabelLineTwoLength : 20  
  105. pieLabelVisible: true  
  106. pieValueVisible: true  
  107. translateY: -50  
  108.  };  
  109.  
  110. Stage {  
  111.   title: "PieChart Window"  
  112.   width: 520  
  113.   height: 300  
  114.   scene: Scene {  
  115. content: [  
  116.   Text {  
  117. font : Font {  
  118. size : 16  
  119.    }  
  120. x: 200  
  121. y: 20  
  122. content: "Pie Chart"  
  123.   },  
  124.   chart  
  125. ]  
  126.   }  
  127. }  
  128.   }  

***就是從java類JavaTest中調用圖表功能:

  1. /*    
  2.  * JavaTest.java    
  3.  * @author Henry Zhanghttp://www.javafxblogs.com    
  4.  */    
  5. package javatest;     
  6.     
  7. import javafx.reflect.FXClassType;     
  8. import javafx.reflect.FXLocal;     
  9. import javafx.reflect.FXLocal.Context;     
  10. import javafx.reflect.FXLocal.ObjectValue;     
  11.     
  12. public class JavaTest {     
  13.   public static void main(String args[]) {     
  14. Context context = FXLocal.getContext();     
  15. FXClassType instance = context.findClass("javatest.MyChart");     
  16. ObjectValue obj = (ObjectValue)instance.newInstance();     
  17.     
  18. JavaInterface ji = (JavaInterface)obj.asObject();     
  19.     
  20. String [] labels = {"January", "Febuary", "March", "April"};     
  21. int [] values = { 18, 20, 25, 37 };     
  22.     
  23. for ( int i=0; i < values.length; i++ ) {     
  24.   ji.addData(labels[i], values[i]);     
  25. }     
  26.     
  27. ji.showChart();     
  28.   }     
  29. }    
  30.  
  31. /*  
  32.  * JavaTest.java  
  33.  * @author Henry Zhanghttp://www.javafxblogs.com  
  34.  */  
  35. package javatest;  
  36.  
  37. import javafx.reflect.FXClassType;  
  38. import javafx.reflect.FXLocal;  
  39. import javafx.reflect.FXLocal.Context;  
  40. import javafx.reflect.FXLocal.ObjectValue;  
  41.  
  42. public class JavaTest {  
  43.   public static void main(String args[]) {  
  44. Context context = FXLocal.getContext();  
  45. FXClassType instance = context.findClass("javatest.MyChart");  
  46. ObjectValue obj = (ObjectValue)instance.newInstance();  
  47.  
  48. JavaInterface ji = (JavaInterface)obj.asObject();  
  49.  
  50. String [] labels = {"January", "Febuary", "March", "April"};  
  51. int [] values = { 18, 20, 25, 37 };  
  52.  
  53. for ( int i=0; i < values.length; i++ ) {  
  54.   ji.addData(labels[i], values[i]);  
  55. }  
  56.  
  57. ji.showChart();  
  58.   }  

在代碼中,這3句是創(chuàng)建JavaFX類javatest.MyChart實例,

  1. Context context = FXLocal.getContext();     
  2. FXClassType instance = context.findClass("javatest.MyChart");     
  3. ObjectValue obj = (ObjectValue)instance.newInstance();    
  4.  
  5. Context context = FXLocal.getContext();  
  6. FXClassType instance = context.findClass("javatest.MyChart");  
  7. ObjectValue obj = (ObjectValue)instance.newInstance(); 

而一下這句則是把JavaFX實例轉化為Java可用的對象:

  1. JavaInterface ji = (JavaInterface)obj.asObject(); 

如果你用的是NetBeans IDE, 你可以在項目屬性中把javatest.JavaTest類設為主類(Main class)(即啟動類)。編譯之后會生成一個javatest.jar文件。程序運行的結果如圖:

Java PieChart via JavaFX

在命令行中可以采用以下方式:

  1. javafx -jar javatest.jar 

實際上,可以用純Java的方式來啟動程序,只要把JavaFX的運行環(huán)境帶上即可,如:

  1. java -Djava.library.path="" 
  2.  -classpath "" -jar javatest.jar 

因為JavaFX需要的jar文件很多,因此這種“最純”的Java方法使用起來比較麻煩。我覺得還是用JavaFX命令簡潔些, 而且JavaFX就是上述java命令的封裝而已。

【編輯推薦】

  1. 主流RIA技術JavaFX、Flex和SilverLight、AJAX比較
  2. 使用JavaFx創(chuàng)建可拖動的Applet示例
  3. JavaFX和Java之間的互操作性
  4. JavaFX對Java開發(fā)者到底意味著什么
  5. RIA之爭 JavaFX是否能后來居上?
責任編輯:彭凡 來源: javafxblogs
相關推薦

2009-07-14 16:07:59

調用JavaFX代碼Swing程序

2011-08-12 11:22:53

Oracle存儲過程Java

2009-07-17 17:00:20

JavaFX功能Swing

2009-06-12 10:58:30

GroovyJavaFXJava平臺

2017-02-24 12:00:35

iOS代碼AutoLayout

2020-08-13 06:56:57

Javascript插件前端

2009-11-26 14:16:06

Java 7

2009-06-15 14:59:31

Java代碼Java

2009-06-19 13:03:31

JavaFX

2012-07-10 13:29:30

Java

2024-01-31 09:43:55

模型訓練

2021-09-09 06:55:43

Web剪輯視頻

2011-08-16 16:59:58

PLSQL分頁存儲過程Java

2009-06-02 09:38:26

javafx發(fā)布JavaFX介紹JavaFX

2011-03-16 09:46:54

Eclipse代碼模板

2009-02-13 10:04:02

AntXSLXML

2011-11-23 09:54:32

AndroidAlarm

2021-09-08 11:02:32

Java代碼圖片

2012-01-17 12:39:09

JavaSwing

2020-02-19 15:02:23

代碼開發(fā)工具
點贊
收藏

51CTO技術棧公眾號