自JavaFX 1.0发布之后,本人撰写的文章JavaFX和Java之间的互操作性被各网站转载。文中总结了3种从Java调用JavaFX的方法。这三种方法分别为: (参见 http://www.javafxblogs.com )
|
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的例子
下一步是创建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 labelString = 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 Zhang http://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();
而一下这句则是把JavaFX实例转化为Java可用的对象:
JavaInterface ji = (JavaInterface)obj.asObject();
如果你用的是NetBeans IDE, 你可以在项目属性中把javatest.JavaTest类设为主类(Main class)(即启动类)。编译之后会生成一个javatest.jar文件。程序运行的结果如图:
在命令行中可以采用以下方式: http://developers.sun.com/blog/henry
javafx -jar javatest.jar
实际上,可以用纯Java的方式来启动程序,只要把JavaFX的运行环境带上即可,如:JavaFX程序例子、教程
java -Djava.library.path="<path to javafx sdk lib>"
-classpath "<all javafx sdk jars>" -jar javatest.jar
因为JavaFX需要的jar文件很多,因此这种“最纯”的java方法使用起来比较麻烦。我觉得还是用javafx命令简洁些, 而且javafx就是上述java命令的封装而已。
如果有问题,请留言讨论。
本文的英文译文同步发表于:Calling JavaFX Classes from Pure Java Code. 中文同步发表于:用纯Java代码调用JavaFX的功能 JavaFX技巧:纯Java代码调用JavaFX的例子
分享到:
相关推荐
javafx2.0,java,javafx,例子,代码 Sun公司(已于20092008年12月05日发布了JavaFX技术的正式版,它使您能利用 JavaFX 编程语 言开发富互联网应用程序(RIA)。JavaFX Script编程语言(以下称为JavaFX)是Sun微...
Java调用电脑摄像头拍照实现例子,运用的是开源项目webcam-capture实现的;详情看这里:https://blog.csdn.net/qq_22078107/article/details/85927626
7. **反射机制**:Java反射允许在运行时检查类的信息,动态创建对象和调用方法,这对于编写通用性强的代码非常有用。 8. **JDBC数据库访问**:Java Database Connectivity (JDBC) 是Java访问数据库的标准API,包括...
10. **反射机制**: 运行时动态加载类、获取类信息、创建对象和调用方法等,是Java提供的一种强大功能。 11. **泛型**: 提高代码的类型安全性,避免类型转换错误,如List、Map, String>等。 12. **枚举**: Java中的...
通过深入学习和实践这些Java代码示例,开发者将能更好地理解和运用Java编程语言,提高编程技巧,为更复杂的应用打下坚实基础。无论是初学者还是有经验的开发者,这个压缩包都是一份宝贵的资源。
这个压缩包文件“Java2实用教程(第5版)习题解答及例子代码.zip”是配套教学资源,包括了书中的习题解答和所有示例代码,旨在帮助读者更好地理解和实践所学知识。 1. **Java基础知识**:Java是一种面向对象的编程...
2. **基础语法**:从变量声明到控制流语句(如if-else、for、while循环),再到方法的定义与调用,这些代码将涵盖Java的基础语法结构。 3. **异常处理**:Java中的异常处理机制允许程序员优雅地处理运行时错误。...
1. **基础语法**:Java代码通常会展示基本语法结构,如变量声明、数据类型(包括原始类型如int和引用类型如String)、控制流(if语句、switch语句、for循环、while循环)、方法定义和调用等。 2. **类与对象**:...
JavaFX 是一个用于构建桌面、移动和嵌入式设备上的富客户端应用程序的现代Java库。它提供了丰富的图形用户界面(GUI)工具包,允许开发者创建美观且交互性强的应用程序。在"JavaFX:我的第一个java fx步骤"这个主题中...
1. **面向对象基础**:Java是一种纯面向对象的编程语言,书中的例子会涵盖类、对象、封装、继承和多态等基础概念。类是对象的模板,通过定义属性(字段)和行为(方法)来描述对象的特征和功能;对象则是类的实例,...
15. **Java SE和JavaFX**:Java Standard Edition (SE) 是基础的Java平台,而JavaFX则提供了构建桌面应用的图形用户界面工具。 通过这些基础知识的学习和实践,初学者可以逐步掌握Java编程,并能够开发出功能丰富的...
15. **Swing和JavaFX**:Java提供了GUI编程库,如Swing和JavaFX,用于创建桌面应用。实例可能包含按钮、文本框、菜单等组件的使用。 这些例子覆盖了Java编程的大部分基础知识,通过实践,你不仅可以掌握理论知识,...
这个名为"100+条JAVA例子源代码"的压缩包文件显然包含了一百多个用于教学或实践的Java源代码示例。这些示例可能是针对初学者到进阶程序员的各种技能水平,涵盖了Java编程的基础概念到高级特性。 1. **面向对象编程...
"超级经典java例子"集合很可能包含了一系列展示Java核心特性和类库应用的代码示例。这些例子可以帮助开发者深入理解Java语言,并熟悉如何有效地利用Java API来解决实际问题。 1. **基础语法与数据类型**:Java提供...
每个“Java小例子”都是一个独立的学习单元,帮助开发者逐步掌握Java语言的核心概念和实践技巧。如果在运行这些例子时遇到缺少的包,可能需要根据代码内容手动导入相应的Java库,例如`import java.util.*;`用于访问...
9. **反射**:反射是Java的高级特性,允许程序在运行时动态获取类的信息(如类名、方法名)并调用相应的方法,增加了程序的灵活性。 10. **网络编程**:Java提供了Socket和ServerSocket类用于实现客户端-服务器通信...
在Java开发中,有时我们需要将Web内容嵌入到桌面应用程序中,这通常通过Java的JavaFX库或Apache Pivot等第三方库实现。本实例是关于如何在Eclipse环境中创建一个简单的Java应用,该应用能内嵌一个浏览器组件。下面将...
Java大学实用教程例子源代码是针对学生和初学者的一个宝贵资源,它包含了Java编程语言的各种实践案例,旨在帮助用户深入理解和掌握Java的核心概念。这些源代码通常与大学课程中的教学内容紧密相关,覆盖了从基础语法...
8. **GUI编程**:Java的Swing或JavaFX库可用于创建图形用户界面,源代码可能包含JFrame, JButton, JTextField等组件的使用,让学习者了解如何构建桌面应用程序。 9. **泛型**:Java泛型提供了类型安全,源代码中...
2. **面向对象**:Java是纯面向对象的语言,包括封装、继承和多态三大特性。这些实例可能包含不同类的设计,以及如何通过对象和方法进行交互。 3. **异常处理**:Java中的try-catch-finally结构是处理程序运行时...