您好,登錄后才能下訂單哦!
本篇內容介紹了“如何用純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文件。程序運行的結果如圖:
在命令行中可以采用以下方式:
javafx -jar javatest.jar
實際上,可以用純Java的方式來啟動程序,只要把JavaFX的運行環境帶上即可,如:
java -Djava.library.path="" -classpath "" -jar javatest.jar
因為JavaFX需要的jar文件很多,因此這種“最純”的Java方法使用起來比較麻煩。我覺得還是用JavaFX命令簡潔些, 而且JavaFX就是上述java命令的封裝而已。
“如何用純Java代碼調用JavaFX的功能”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。