中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用純Java代碼調用JavaFX的功能

發布時間:2021-07-14 09:35:48 來源:億速云 閱讀:213 作者:chen 欄目:編程語言

本篇內容介紹了“如何用純Java代碼調用JavaFX的功能”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

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

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

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

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

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

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

/*     * JavaInterface.java     *     * @author Henry Zhang  http://www.javafxblogs.com     */    package javatest;     public interface JavaInterface {       public void addData(String name, float data);       public void showChart();     }     /*   * JavaInterface.java   *   * @author Henry Zhang  http://www.javafxblogs.com   */  package javatest;  public interface JavaInterface {    public void addData(String name, float data);    public void showChart();  }

下一步是創建JavaFX類MyChart來實現這個interface:

/*     * MyChart.fx     *     * @author Henry Zhang http://www.javafxblogs.com     */    package javatest;         import javafx.scene.chart.PieChart;     import javafx.scene.Scene;     import javafx.scene.text.Font;     import javafx.scene.text.Text;     import javafx.stage.Stage;     import javafx.scene.chart.PieChart3D;         public class MyChart extends JavaInterface {       var chartData :  PieChart.Data[] = [];           public override function addData( l:String, v: Number):Void {     var llabelString = l;         var data =  PieChart.Data {       label : l       value : v       action: function() {     println("{labelString} clicked!");       }      } ;         insert data into chartData;       }           public override function showChart() : Void {     var chart =       PieChart3D {     data : chartData     pieThickness: 25    pieLabelFont: Font{ size: 9 };     pieToLabelLineOneLength: 10    pieToLabelLineTwoLength : 20    pieLabelVisible: true    pieValueVisible: true    translateY: -50     };         Stage {       title: "PieChart Window"      width: 520      height: 300      scene: Scene {     content: [       Text {     font : Font {     size : 16       }     x: 200    y: 20    content: "Pie Chart"      },       chart     ]       }     }       }     }     /*   * MyChart.fx   *   * @author Henry Zhang http://www.javafxblogs.com   */  package javatest;   import javafx.scene.chart.PieChart;  import javafx.scene.Scene;  import javafx.scene.text.Font;  import javafx.scene.text.Text;  import javafx.stage.Stage;  import javafx.scene.chart.PieChart3D;   public class MyChart extends JavaInterface {    var chartData :  PieChart.Data[] = [];     public override function addData( l:String, v: Number):Void {  var llabelString = l;   var data =  PieChart.Data {    label : l    value : v    action: function() {  println("{labelString} clicked!");    }   } ;   insert data into chartData;    }     public override function showChart() : Void {  var chart =    PieChart3D {  data : chartData  pieThickness: 25  pieLabelFont: Font{ size: 9 };  pieToLabelLineOneLength: 10  pieToLabelLineTwoLength : 20  pieLabelVisible: true  pieValueVisible: true  translateY: -50   };   Stage {    title: "PieChart Window"    width: 520    height: 300    scene: Scene {  content: [    Text {  font : Font {  size : 16     }  x: 200  y: 20  content: "Pie Chart"    },    chart  ]    }  }    }  }

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

/*     * JavaTest.java     * @author Henry Zhanghttp://www.javafxblogs.com     */    package javatest;         import javafx.reflect.FXClassType;     import javafx.reflect.FXLocal;     import javafx.reflect.FXLocal.Context;     import javafx.reflect.FXLocal.ObjectValue;         public class JavaTest {       public static void main(String args[]) {     Context context = FXLocal.getContext();     FXClassType instance = context.findClass("javatest.MyChart");     ObjectValue obj = (ObjectValue)instance.newInstance();         JavaInterface ji = (JavaInterface)obj.asObject();         String [] labels = {"January", "Febuary", "March", "April"};     int [] values = { 18, 20, 25, 37 };         for ( int i=0; i < values.length; i++ ) {       ji.addData(labels[i], values[i]);     }         ji.showChart();       }     }     /*   * JavaTest.java   * @author Henry Zhanghttp://www.javafxblogs.com   */  package javatest;   import javafx.reflect.FXClassType;  import javafx.reflect.FXLocal;  import javafx.reflect.FXLocal.Context;  import javafx.reflect.FXLocal.ObjectValue;   public class JavaTest {    public static void main(String args[]) {  Context context = FXLocal.getContext();  FXClassType instance = context.findClass("javatest.MyChart");  ObjectValue obj = (ObjectValue)instance.newInstance();   JavaInterface ji = (JavaInterface)obj.asObject();   String [] labels = {"January", "Febuary", "March", "April"};  int [] values = { 18, 20, 25, 37 };   for ( int i=0; i < values.length; i++ ) {    ji.addData(labels[i], values[i]);  }   ji.showChart();    }  }

在代碼中,這3句是創建JavaFX類javatest.MyChart實例,

Context context = FXLocal.getContext();     FXClassType instance = context.findClass("javatest.MyChart");     ObjectValue obj = (ObjectValue)instance.newInstance();     Context context = FXLocal.getContext();  FXClassType instance = context.findClass("javatest.MyChart");  ObjectValue obj = (ObjectValue)instance.newInstance();

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

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

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

如何用純Java代碼調用JavaFX的功能

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

javafx -jar javatest.jar

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

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

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

“如何用純Java代碼調用JavaFX的功能”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴和县| 云阳县| 珲春市| 奉新县| 胶州市| 娄烦县| 洛浦县| 宝丰县| 突泉县| 奉新县| 凤山市| 绍兴市| 乌苏市| 萝北县| 汉川市| 合江县| 报价| 克什克腾旗| 西安市| 微博| 克拉玛依市| 阜阳市| 肇州县| 行唐县| 呈贡县| 宜章县| 新邵县| 公主岭市| 杭州市| 东丽区| 富顺县| 霍州市| 西安市| 呼和浩特市| 丰原市| 孟州市| 石河子市| 霍林郭勒市| 安岳县| 涞源县| 南康市|