`
javafxguy
  • 浏览: 151324 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

JavaFX技巧:纯Java代码调用JavaFX的例子

阅读更多

 

自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的例子

www.JavaFXblogs.com

下一步是创建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文件。程序运行的结果如图:

Java PieChart via JavaFX

 

在命令行中可以采用以下方式: 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的例子

分享到:
评论
3 楼 mingway 2014-03-03  
很强大啊,学习
2 楼 houxuanyun 2012-04-25  
个股纷纷
1 楼 houxuanyun 2012-04-25  
[/size][size=xx-small]

相关推荐

    javafx2.0官方例子

    javafx2.0,java,javafx,例子,代码 Sun公司(已于20092008年12月05日发布了JavaFX技术的正式版,它使您能利用 JavaFX 编程语 言开发富互联网应用程序(RIA)。JavaFX Script编程语言(以下称为JavaFX)是Sun微...

    java调用电脑摄像头拍照例子

    Java调用电脑摄像头拍照实现例子,运用的是开源项目webcam-capture实现的;详情看这里:https://blog.csdn.net/qq_22078107/article/details/85927626

    Java编程代码实例集锦

    7. **反射机制**:Java反射允许在运行时检查类的信息,动态创建对象和调用方法,这对于编写通用性强的代码非常有用。 8. **JDBC数据库访问**:Java Database Connectivity (JDBC) 是Java访问数据库的标准API,包括...

    100个Java经典例子后端- Java

    10. **反射机制**: 运行时动态加载类、获取类信息、创建对象和调用方法等,是Java提供的一种强大功能。 11. **泛型**: 提高代码的类型安全性,避免类型转换错误,如List、Map, String&gt;等。 12. **枚举**: Java中的...

    164个java完整代码

    通过深入学习和实践这些Java代码示例,开发者将能更好地理解和运用Java编程语言,提高编程技巧,为更复杂的应用打下坚实基础。无论是初学者还是有经验的开发者,这个压缩包都是一份宝贵的资源。

    Java2实用教程(第5版)习题解答及例子代码.zip

    这个压缩包文件“Java2实用教程(第5版)习题解答及例子代码.zip”是配套教学资源,包括了书中的习题解答和所有示例代码,旨在帮助读者更好地理解和实践所学知识。 1. **Java基础知识**:Java是一种面向对象的编程...

    164个完整的Java代码.zip

    2. **基础语法**:从变量声明到控制流语句(如if-else、for、while循环),再到方法的定义与调用,这些代码将涵盖Java的基础语法结构。 3. **异常处理**:Java中的异常处理机制允许程序员优雅地处理运行时错误。...

    Java代码.zip

    1. **基础语法**:Java代码通常会展示基本语法结构,如变量声明、数据类型(包括原始类型如int和引用类型如String)、控制流(if语句、switch语句、for循环、while循环)、方法定义和调用等。 2. **类与对象**:...

    JavaFX:我的第一个 java fx 步骤

    JavaFX 是一个用于构建桌面、移动和嵌入式设备上的富客户端应用程序的现代Java库。它提供了丰富的图形用户界面(GUI)工具包,允许开发者创建美观且交互性强的应用程序。在"JavaFX:我的第一个java fx步骤"这个主题中...

    《Java面向对象程序设计(第2版)》例子源代码

    1. **面向对象基础**:Java是一种纯面向对象的编程语言,书中的例子会涵盖类、对象、封装、继承和多态等基础概念。类是对象的模板,通过定义属性(字段)和行为(方法)来描述对象的特征和功能;对象则是类的实例,...

    java 学习代码这些是一些基础例子

    15. **Java SE和JavaFX**:Java Standard Edition (SE) 是基础的Java平台,而JavaFX则提供了构建桌面应用的图形用户界面工具。 通过这些基础知识的学习和实践,初学者可以逐步掌握Java编程,并能够开发出功能丰富的...

    java学习150个经典的例子

    15. **Swing和JavaFX**:Java提供了GUI编程库,如Swing和JavaFX,用于创建桌面应用。实例可能包含按钮、文本框、菜单等组件的使用。 这些例子覆盖了Java编程的大部分基础知识,通过实践,你不仅可以掌握理论知识,...

    100+条JAVA例子源代码

    这个名为"100+条JAVA例子源代码"的压缩包文件显然包含了一百多个用于教学或实践的Java源代码示例。这些示例可能是针对初学者到进阶程序员的各种技能水平,涵盖了Java编程的基础概念到高级特性。 1. **面向对象编程...

    超级经典java例子,涉及到大部分java类库的使用

    "超级经典java例子"集合很可能包含了一系列展示Java核心特性和类库应用的代码示例。这些例子可以帮助开发者深入理解Java语言,并熟悉如何有效地利用Java API来解决实际问题。 1. **基础语法与数据类型**:Java提供...

    java小例子

    每个“Java小例子”都是一个独立的学习单元,帮助开发者逐步掌握Java语言的核心概念和实践技巧。如果在运行这些例子时遇到缺少的包,可能需要根据代码内容手动导入相应的Java库,例如`import java.util.*;`用于访问...

    Java教材实例代码

    9. **反射**:反射是Java的高级特性,允许程序在运行时动态获取类的信息(如类名、方法名)并调用相应的方法,增加了程序的灵活性。 10. **网络编程**:Java提供了Socket和ServerSocket类用于实现客户端-服务器通信...

    java应用嵌入浏览器简单实例 Eclipse工程

    在Java开发中,有时我们需要将Web内容嵌入到桌面应用程序中,这通常通过Java的JavaFX库或Apache Pivot等第三方库实现。本实例是关于如何在Eclipse环境中创建一个简单的Java应用,该应用能内嵌一个浏览器组件。下面将...

    Java大学实用教程例子源代码

    Java大学实用教程例子源代码是针对学生和初学者的一个宝贵资源,它包含了Java编程语言的各种实践案例,旨在帮助用户深入理解和掌握Java的核心概念。这些源代码通常与大学课程中的教学内容紧密相关,覆盖了从基础语法...

    Java自学程序源代码

    8. **GUI编程**:Java的Swing或JavaFX库可用于创建图形用户界面,源代码可能包含JFrame, JButton, JTextField等组件的使用,让学习者了解如何构建桌面应用程序。 9. **泛型**:Java泛型提供了类型安全,源代码中...

    164个完整的java代码

    2. **面向对象**:Java是纯面向对象的语言,包括封装、继承和多态三大特性。这些实例可能包含不同类的设计,以及如何通过对象和方法进行交互。 3. **异常处理**:Java中的try-catch-finally结构是处理程序运行时...

Global site tag (gtag.js) - Google Analytics