Java富客户端平台JavaFX:创建框架实战

开发 后端
JavaFX平台是Java客户端平台的演进,用于帮助程序开发人员快速创建和部署富客户端应用程序,实现跨平台的一致性。JavaFX平台基于Java技术,提供了一系列的图表和多媒体API,用于简化数据驱动的企业客户端应用程序的开发。

2007年JavaOne大会上***对外发布JavaFX,时隔三年之后,2010年JavaOne大会重点强调了Oracle针对Java平台的计划。未来JavaFX希望在渲染方面具备通用的抽象能力,无论是针对Java 2D/OpenGL/Hospot VM框架或是Javascript/HTML5/Web浏览器框架,都可以使用同样的API来实现。

JavaFX最早有两个主要的组成部分:JavaFX脚本和JavaFX移动。JavaFX的核心是JavaFX脚本,它是一种声明型的脚本语言。它与Java类保持了高度的交互性。JavaFX移动(JavaFX Mobile),是用来为移动设备开发Java应用的平台。然而,后来Oracle宣布了JavaFX脚本被废弃,替换它的是一种新的Java API,用来构建JavaFX应用,当然,也可能从类似JRuby,Clojure,Scala和Groovy等语言中选取代替者。正当我犹豫是否将学习重心转移到JavaFX上时,2011年JavaFX的发展前景给我注入了一种强心剂,让我下定决心来好好学些JavaFX2.0。

2011年在JavaOne大会上,Oracle秉承一个理念,为了追求JavaFX的标准化,Oracle推出了JavaFX 2.0,为企业业务应用提供先进的Java用户界面(UI)平台,致力于把Java变成***的富客户端平台。未来预计将对JavaFX平台实现开源,使其成为OpenJDK社区的新项目。

一、什么是JavaFX?

JavaFX平台是Java客户端平台的演进,用于帮助程序开发人员快速创建和部署富客户端应用程序,实现跨平台的一致性。JavaFX平台基于Java技术,提供了一系列的图表和多媒体API,用于简化数据驱动的企业客户端应用程序的开发。

对于Java开发人员而言,JavaFX平台具有以下优势:

1、由于JavaFX平台是用Java语言编写的,Java开发人员可以充分利用他们已有的技能和工具来开发JavaFX应用程序。

2、由于Java被广泛使用,有经验的Java开发人员能够快速高效地开发JavaFX应用程序。

3、通过使用服务器和客户端平台上的Java技术,JavaFX平台通过减少业务解决方案的复杂性来减低了投资风险。

4、基于以上几点优势,开发费用也有所减低。

5、JavaFX平台为广大开发人员提供了开发框架和运行时环境,用于创建企业业务应用程序,同时支持Java实现跨平台。

二、JavaFX现状发展: JavaFX 2.0发布

在JavaOne 2011大会上,甲骨文在宣布推出Windows 平台上的JavaFX 2.0版本的同时,也发布了Mac OS X平台上的开发者预览版JavaFX 2.0。

JavaFX 2.0 是 JavaFX 一个主要的升级版本,为下一代的 UI 平台而设计,提供强大的基于Java 的UI 设计能力,可处理大规模数据驱动的商业逻辑。JavaFX 2.0 包含非常丰富的UI 控件、图形和多媒体特性,可用于简化可视化应用的开发,新增的 WebView 可直接在应用中嵌入网页;另外 2.0 版本允许使用 FXML 进行 UI 定义,这是一个脚本化基于XML 的标识语言。

JavaTM SE 7 Update 2 包含了新的JVM,用来提高可靠性和性能,支持Oracle Solaris 11和Firefox 5以及更高版本。Java SE包含了JavaFX,Java JDK包含了JavaFX SDK以及JavaFX运行时环境。

本月初适用于Windows平台上的JavaFX 2.1开发者预览版可供下载,该版本包含了新的图表和复合框控件。

三、如何创建应用程序框架

JavaFX应用程序都有一个相似的框架。Main()函数调用Launch()函数,Start()方法用于设置应用程序的UI设计。

如何使用NetBeans 7.1来创建JavaFX项目

1、下载安装JavaFX 2.0 SDK。我安装文件的默认路径是C:\Program Files\Oracle\JavaFX 2.0 SDK、C:\Program Files\Oracle\JavaFX Runtime 2.0.

虽然通过命令行的方式可以运行JavaFX应用程序,但是我准备用NetBeans来构建我的***个程序。NetBeans 7.1 beta支持JavaFX 2.0,而JavaFX 2.0 SDK需要单独下载。

我下载了NetBeans 7.1 beta所有版本,因为Java SE、JavaFX都能支持Groovy、Java EE、PHP以及C/C++来创建桌面、Web以及移动应用程序。目前的NetBeans IDE支持Windows、 Mac、Linux 以及 Oracle Solaris平台。它支持Java平台中的***规则和标准。而且,NetBeans IDE 7.1 Beta除了支持Java标准外,还支持JavaFX 2.0,并且对JavaFX 2.0应用程序可以进行完整的编译、调试和监测。

2、在NetBeans 7.1中创建了一个新的JavaFX项目。创建项目有两种方法。

“CTRL+SHIFT+N”

右键“项目”选项卡,选择“新建项目”

注:***次在新安装的NetBeans 7.1beta版本中创建JavaFX项目时需要激活。

3、一旦点击“完成”按钮创建完JavaFX项目后,就会生成三个文件。这些文件包括HelloJavaFX.java、Sample.java以及 Sample.fxml。

在项目上点击“生成”按钮后,就可以看到NetBeans 7.1 beta生成什么样的文件。

在'dist'目录下,可以使用JAR和JNLP文件来生成HTML文件。

四、如何使用内置的布局面板

JavaFX应用程序支持手动设置UI布局,可以为每个UI元素来设置合适的位置和大小属性,而最简单的方法是充分利用布局面板。JavaFX SDK提供了几个布局容器类,称之为面板,用于轻松创建和管理一些经典的布局,比如行、列、栈等。作为调整后的窗口,布局面板可以根据节点的属性来灵活自动调整位置和大小。

使用JavaFX提供的布局面板如下:

1、BorderPane

BorderPane布局面板提供了五个区域来放置节点:上下左右中。图1-1显示了布局类型,可以用来创建边框面板,可以灵活调整区域大小。

边框面板可以用于创建顶部经典的工具条,底部状态栏,左端导航栏面板,右边额外信息,中间的工作区。

以下代码为如何在每个区域里创建一个多边形边框面板

  1. Example 1-1 Create a Border Pane  
  2.  
  3. BorderPane layout = new BorderPane();  
  4. layout.setTop(new Rectangle(20050, Color.DARKCYAN));  
  5. layout.setBottom(new Rectangle(20050, Color.DARKCYAN));  
  6. layout.setCenter(new Rectangle(100100, Color.MEDIUMAQUAMARINE));  
  7. layout.setLeft(new Rectangle(50100, Color.DARKTURQUOISE));  
  8. layout.setRight(new Rectangle(50100, Color.DARKTURQUOISE)); 

2、Hbox

Hbox布局面板提供了一种简单的方法来调整单行中的节点。

Padding属性可以用来设置节点和Hbox面板之间的间距。Spacing属性可以用来管理节点之间的距离。可以调整背景色来调整风格。

以下示例为使用Hbox面板来创建一个工具条,包含两个按钮

  1. Example 1-2 Create an HBox Pane  
  2.  
  3. HBox hbox = new HBox();  
  4. hbox.setPadding(new Insets(15121512));  
  5. hbox.setSpacing(10);  
  6. hbox.setStyle("-fx-background-color: #336699");  
  7.  
  8. Button buttonCurrent = new Button("Current");  
  9. buttonCurrent.setPrefSize(10020);  
  10.  
  11. Button buttonProjected = new Button("Projected");  
  12. buttonProjected.setPrefSize(10020);  
  13. hbox.getChildren().addAll(buttonCurrent, buttonProjected);  
  14.  
  15. BorderPane border = new BorderPane();  
  16. border.setTop(hbox);  

3、VBox

VBox布局面板与Hbox布局面板相似。Padding属性可以用来调整节点和VBox面板边缘的间距。Spacing属性用于调整节点之间的间距。

  1. Example 1-3 Create a VBox Pane  
  2.  
  3. VBox vbox = new VBox();  
  4. vbox.setPadding(new Insets(10101010));  
  5. vbox.setSpacing(10);  
  6.  
  7. Text title = new Text("Data");  
  8. title.setFont(Font.font("Amble CN", FontWeight.BOLD, 14));  
  9. vbox.getChildren().add(title);  
  10.  
  11. Text options[] = new Text[] {  
  12. new Text(" Sales"),  
  13. new Text(" Marketing"),  
  14. new Text(" Distribution"),  
  15. new Text(" Costs")};  
  16.  
  17. for (int i=0; i<4; i++) {  
  18. vbox.getChildren().add(options[i]);  
  19. }  
  20.  
  21. border.setLeft(vbox); // Add to BorderPane from Example 1-2 

4、GridPane 

GridPane布局面板允许你创建一个灵活的网格,在行列中灵活调整节点的布局。 

网格可以按照需要在单元格中灵活放置节点。网格面板适用于创建由行列组成的表格,图1-8显示了网格面板,包含了图标、标题、副标题、文本和饼图。gridLinesVisible属性可以用来显示网格线条,显示行和列。

  1. Example 1-5 Create a Grid Pane  
  2.  
  3. GridPane grid = new GridPane();  
  4. grid.setHgap(10);  
  5. grid.setVgap(10);  
  6. grid.setPadding(new Insets(00010));  
  7.  
  8. // Category in column 2, row 1  
  9. Text category = new Text("Sales:");  
  10. category.setFont(Font.font("Tahoma", FontWeight.BOLD, 20));  
  11. grid.add(category, 10);  
  12.  
  13. // Title in column 3, row 1  
  14. Text chartTitle = new Text("Current Year");  
  15. chartTitle.setFont(Font.font("Tahoma", FontWeight.BOLD, 20));  
  16. grid.add(chartTitle, 20);  
  17.  
  18. // Subtitle in columns 2-3, row 2  
  19. Text chartSubtitle = new Text("Goods and Services");  
  20. grid.add(chartSubtitle, 1121);  
  21.  
  22. // House icon in column 1, rows 1-2  
  23. ImageView imageHouse = new ImageView(  
  24. new Image(LayoutSample.class.getResourceAsStream("graphics/house.png")));  
  25. grid.add(imageHouse, 0012);  
  26.  
  27. // Left label in column 1 (bottom), row 3  
  28. Text goodsPercent = new Text("Goods\n80%");  
  29. GridPane.setValignment(goodsPercent, VPos.BOTTOM);  
  30. grid.add(goodsPercent, 02);  
  31.  
  32. // Chart in columns 2-3, row 3  
  33. ImageView imageChart = new ImageView(  
  34. new Image(LayoutSample.class.getResourceAsStream("graphics/piechart.png")));  
  35. grid.add(imageChart, 1221);  
  36.  
  37. // Right label in column 4 (top), row 3  
  38. Text servicesPercent = new Text("Services\n20%");  
  39. GridPane.setValignment(servicesPercent, VPos.TOP);  
  40. grid.add(servicesPercent, 32);  
  41.  
  42. border.setCenter(grid); // Add to BorderPane from Example 1-2 

五、JavaFX应用程序成功示例演示

1、Ensemble 

Ensemble提供了一系列的应用程序来展示JavaFX的不同特征,比如动画、图表、以及控件。

2、Sales Dashboard 

这是Henley汽车公司的一个客户端-服务器模式的应用程序。使用JavaDB,可以在EJB服务器上模拟汽车的销售。可以通过Derbu和web服务来获取数据信息。通过混合使用FXML和JavaFX,客户端可以掩饰各种不同的数据。

3、SwingInterop Sample

Swing应用程序能够显示如何有效组合Swing和JavaFX。它可以使用JavaFX组件在一个选项卡中实现图表和表单,再另一个选项卡中显示由JavaFX实现的简单浏览器。

原文链接:http://tech.it168.com/a2011/1230/1296/000001296796.shtml

【编辑推荐】

  1. Java读取WEB应用中的资源
  2. Java中运用数组的四种排序方法
  3. Java实现实用的ZIP压缩与解压
  4. Java防止SQL注入的几个途径
  5. Java并发编程:守护线程
责任编辑:林师授 来源: it168
相关推荐

2011-10-10 09:11:09

Java

2010-07-28 16:16:57

Flex富客户端

2018-03-28 09:04:25

Oracle Java技术

2012-11-28 11:05:42

IBMdW

2023-03-05 18:36:52

ChatGpt跨平台ORM

2010-03-25 08:53:43

JavaFXHTML 5

2009-06-23 14:00:49

JavaFX开发

2009-03-24 10:04:03

GrailsAjaxJava

2009-04-01 13:56:20

JavaFX开发JavaFXSwing

2009-03-03 16:36:03

javafxWebSun

2012-03-27 14:34:07

Visual Stud微软MVC

2009-06-12 19:18:08

REST客户端框架JavaScript

2009-12-25 15:12:01

WPF平台

2009-04-22 18:42:13

Vmware虚拟化英特尔

2010-08-02 16:33:11

Flex Spring

2009-07-16 11:13:50

Java Swing

2022-05-11 13:56:08

Java项目redis客户端

2016-04-29 10:02:39

2017-11-22 07:37:43

Google云端GPU

2010-08-01 16:20:29

Android
点赞
收藏

51CTO技术栈公众号