成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用純Java代碼調(diào)用JavaFX的功能

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

從Java調(diào)用JavaFX的三種方法分別為:

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

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

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

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

假定我們需要從Java中調(diào)用JavaFX的圖表(charting)功能。我們首先用JavaFX reflection API生成JavaFX類的實(shí)例。然后我們再通過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來實(shí)現(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中調(diào)用圖表功能:

  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實(shí)例,

  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實(shí)例轉(zhuǎn)化為Java可用的對象:

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

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

Java PieChart via JavaFX

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

  1. javafx -jar javatest.jar 

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

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

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

【編輯推薦】

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

2009-07-14 16:07:59

調(diào)用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

2012-07-10 13:29:30

Java

2009-06-15 14:59:31

Java代碼Java

2009-06-19 13:03:31

JavaFX

2011-03-16 09:46:54

Eclipse代碼模板

2021-09-09 06:55:43

Web剪輯視頻

2025-05-19 08:10:00

PythonDashGo開源

2024-01-31 09:43:55

模型訓(xùn)練

2009-02-13 10:04:02

AntXSLXML

2009-06-02 09:38:26

javafx發(fā)布JavaFX介紹JavaFX

2011-08-16 16:59:58

PLSQL分頁存儲過程Java

2011-11-23 09:54:32

AndroidAlarm

2012-04-01 09:43:14

CSSWEB

2020-02-19 15:02:23

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

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 毛片99| 玖玖色在线视频 | 亚洲欧美日韩精品久久亚洲区 | 91视频网址| 国产一区二区自拍 | 亚洲国产免费 | 免费观看一级毛片视频 | 精品中文在线 | 亚洲第一av| 久久久久久久久淑女av国产精品 | 亚洲午夜精品一区二区三区他趣 | 亚洲欧美一区二区三区国产精品 | 自拍偷拍中文字幕 | 日本不卡免费新一二三区 | 日韩一级免费观看 | 999久久久久久久久6666 | 午夜精品久久久久久久久久久久久 | 精品av天堂毛片久久久借种 | 亚洲国产精品一区二区久久 | 新91视频网 | 日韩一区二区成人 | 亚洲一区二区在线 | 成人在线免费观看av | 欧美色a v | www.色53色.com | 91中文字幕在线观看 | 福利视频亚洲 | 午夜国产 | 欧美日韩国产精品一区二区 | 久久久tv | 男人久久天堂 | 精品日韩一区二区 | 久久久精品网站 | a级性视频 | 久久久一区二区三区 | 欧美在线视频一区二区 | 中文字幕av一区二区三区 | 久久精品亚洲精品国产欧美 | 伊人久久综合 | 精品视频一区二区在线观看 | 国产精品爱久久久久久久 |