日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
用純Java代碼調用JavaFX的功能

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

網(wǎng)站建設哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、微信小程序開發(fā)、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了龍馬潭免費建站歡迎大家使用!

1. 用ScriptEngineManager類。這是基于JSR-223規(guī)范的java腳本API( scripting API)??梢栽趈ava程序中運行一些腳本,如 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端啟動代碼。例如,如果你已經有了一個較完整的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文件。程序運行的結果如圖:

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

 
 
 
 
  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命令的封裝而已。


當前名稱:用純Java代碼調用JavaFX的功能
網(wǎng)頁鏈接:http://www.dlmjj.cn/article/cdgdcos.html