新聞中心
本篇內(nèi)容介紹了“如何用純Java代碼調(diào)用JavaFX的功能”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)專注于大邑縣網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供大邑縣營銷型網(wǎng)站建設(shè),大邑縣網(wǎng)站制作、大邑縣網(wǎng)頁設(shè)計(jì)、大邑縣網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造大邑縣網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供大邑縣網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
從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)一個(gè)Java的interface,然后Java程序可以通過這個(gè)interface來調(diào)用JavaFX的功能。這中間的interface起了個(gè)橋梁的作用。
第三種方法應(yīng)該是比較“正規(guī)”而且“優(yōu)美”的調(diào)用方式。但是也有一點(diǎn)不足:程序代碼的入口必須從JavaFX啟動。這是因?yàn)镴avaFX程序比較容易生成JavaFX類的實(shí)例,從而可以供Java方使用。可是我們有時(shí)會碰到一些特定的情況,需要從Java端啟動代碼。例如,如果你已經(jīng)有了一個(gè)較完整的Java程序,你需要用調(diào)用JavaFX的某些功能,這時(shí)候較好的方法是把Java作為程序的入口。為了解決這個(gè)問題,我把第2和第3種方法作了融合,大家可以看看下面的例子。
假定我們需要從Java中調(diào)用JavaFX的圖表(charting)功能。我們首先用JavaFX reflection API生成JavaFX類的實(shí)例。然后我們再通過java的interface來使用它。因此,我們先定義一個(gè)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(); }
下一步是創(chuàng)建JavaFX類MyChart來實(shí)現(xiàn)這個(gè)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中調(diào)用圖表功能:
/* * 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句是創(chuàng)建JavaFX類javatest.MyChart實(shí)例,
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實(shí)例轉(zhuǎn)化為Java可用的對象:
JavaInterface ji = (JavaInterface)obj.asObject();
如果你用的是NetBeans IDE, 你可以在項(xiàng)目屬性中把javatest.JavaTest類設(shè)為主類(Main class)(即啟動類)。編譯之后會生成一個(gè)javatest.jar文件。程序運(yùn)行的結(jié)果如圖:
在命令行中可以采用以下方式:
javafx -jar javatest.jar
實(shí)際上,可以用純Java的方式來啟動程序,只要把JavaFX的運(yùn)行環(huán)境帶上即可,如:
java -Djava.library.path="" -classpath "" -jar javatest.jar
因?yàn)镴avaFX需要的jar文件很多,因此這種“最純”的Java方法使用起來比較麻煩。我覺得還是用JavaFX命令簡潔些, 而且JavaFX就是上述java命令的封裝而已。
“如何用純Java代碼調(diào)用JavaFX的功能”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
網(wǎng)站欄目:如何用純Java代碼調(diào)用JavaFX的功能
本文來源:http://ef60e0e.cn/article/gsjgcs.html