JavaFX入门-程序员宅基地

技术标签: JavaFX  Java  Netbeans  Eclipse  Swing  

JavaFX入门教程

 

 

下载源代码


〖 作者:翻译:Caoer 〗

     什么是JavaFX?SUN在2007年春天发布了一个叫JavaFX新框架。这是一个泛泛的名字,因为JavaFX主要包含Script and Mobile两个组件,在将来SUN将开发更多的组件。

     JavaFX 的核心是 JavaFX 脚本,是一个声明式脚本语言。尽管同Java代码非常不同,但是同Java类具有很高的交互度。 JavaFX 中的很多类主要为了更容易实现Swing和Java2D而设计的。使用 JavaFX 脚本,您能很容易的为文本和图形开发GUI接口、动画和非常COOL的效果。并且,您能将Java和HTML代码包装到 JavaFX 脚本中。

    第二个组件- JavaFX Mobile,是为移动设备开发Java应用的平台。它最终会成为开发 JavaFX 脚本的平台但是现在同这篇文章实用的技术还很不兼容。

<script type="text/javascript"></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
JavaFX 应用的一些例子

    在开始学习一门新的语言前,让我们先看一下JavaFX代码的一些例子。JavaFX 官方站点具有大量的JavaFX 实例。请点击JavaFX Script 2D Graphics Tutorial下载该实例. 下载完成以后,双击tutorial.jnlp 文件即可运行。几秒过后,你应该能够看到如图一的JavaFX实例运行场景(若没有出现该图片,你必须为.jnlp扩展名重新配置Java Web Start)。 

图一、运行 tutorial.jnlp tutorial

    花些时间看一看这些例子和源代码。仅仅使用有限的几行JavaFX代码就能得到很多有趣的效果。如果你对于JavaFX的应用还是感到摸不着头脑,看一看下面的两个demo。它们是StudioMoto Tesla Motors 站点的部分重新实现。您可以从OpenJFX 项目站点下载OpenJFX 脚本Studiomoto Demo Tesla Demo。它们需要Java Web Start 才能运行,但是也取决于你的机器配置它们可能自动运行,或者你必须找到和运行已经下载的.jnlp文件。

下载安装JavaFX

  如果你对于学习开发JavaFX应用程序,您应该了解至少使用JavaFX三个方法。同时了解JavaFX应用程序不是基于浏览器的也很重要。最简单最快捷的方法是基于叫JavaFXPad轻量级的工具。使用该工具的主要优势是你总能立即看到你在编辑器里所作更改的效果。你能从JavaFX项目网站下载到该工具( JavaFXPad )。并且运行它需要Java Web Start (如图二)。

 
图二、运行JavaFXPad编辑器

     使用JavaFX的另一种方式是使用JavaFX脚本NetBeans 5.5插件或者Eclipse 3.2插件(需要下载和安装NetBeans 5.5 或者 Eclipse 3.2.2 以上集成开发工具 )。若您已经使用 NetBeans 5.5开始你的JavaFX之旅,OpenJFX项目网站的对于NetBean开发JavaFX的说明将会给予你帮助。 相似的如果您使用基于EclipseJavaFX插件,您可以去JavaFXEclipse插件。注意这篇文章中的所有例子已经在NetBeans5.5JavaFX插件中测试过,但是应该能够使用其他方法运行。

使用NetBeans 5.5下的JavaFX插件开发Hello World 程序

每当开始学习一门新的语言时,我们必定要写Hello World 小程序:

源码列表1

import javafx.ui.*;

import java.lang.System;

Frame {

centerOnScreen: true

visible: true

height: 50

width: 350

title: "HelloWorld application..."

background: yellow

onClose: operation() {System.exit(0);}

content: Label {

text: "Hello World"

}

}

 在

1.                   启动NetBeans 5.5.

2.                   从主菜单选择File -> New Project.

3.                   在新项目窗口,选择目录常规目录和 Java 应用项目(点击下一步).

4.                   在新的Java应用程序窗口,在项目名文本框敲入 "FXExample".

5.                   在相同窗口,用浏览按钮选择项目的目录.

6.                   取消 "Set as main project" "Create main class" 复选框 (点击完成).

7.                   右击FXExample -> Source Packages 和选择 New -> File/Folder.

8.                   在新的文件窗口,选择另一个目录和JavaFX文件类型(点击下一步).

9.                   在新的JavaFX文件窗口,敲入"HelloWorld" 作为文件名和"src"作为目录(点击完成).

10.               拷贝源码列表1 HelloWorld.fx.

11.               右击FXExample 项目选择项目属性.

12.               在项目FXExample属性对话框 ,选择从目录面板运行节点.

13.               在参数文本框敲入 "Hello World" (点击完成).

14.               右击FXExample 项目选择运行项目选项.

如果一切良好,你应该看到一个窗体如图三:


图三、 NetBeans 5.5中运行 Hello World 应用程序

现在你拥有了开发和运行任何JavaFX应用程序的IDE软件支持.

JavaFX 语法

    在正式开始学习JavaFX,让我们浏览一遍该语言的语法要点。如果你非常熟悉Java语言,这些语法的大多数会让你感到非常熟悉,但是有一些会相当不一样。

JavaFX 原始类型

    JavaFX 支持原始类型:String (对应于 java.lang.String), Boolean (对应于 java.lang.Boolean), Number (对应于 java.lang.Number) Integer (对应于 byte,short,int,long,BigInteger).

JavaFX 变量

一个JavaFX变量使用var关键字声明。看下面的例子:

 

 

操作符

 

众所周知的Java操作符&&, || ! JavaFX中采用下面的形式:

·                     Java: && JavaFX: and
·                     Java: ||  JavaFX: or

·                     Java: !    JavaFX: not

JavaFX 方法

JavaFX 支持这些方法. 具有参数、变量声明和返回值的方法举例:

function taxes(x) { var t:Number = (19.0/100.0)*x; return t; }

JavaFX if 语句


JavaFX中,你你能通过使用if语句使用条件判断。

if (条件) { //动作 } else if (条件) { //动作 } else { //动作 }

JavaFX while 语句

这个 while 语句同在Java中的while语句相似。 while (条件) { //动作}

JavaFX for 语句

for 语句用于循环和间隔(间隔使用方括号[] .. 符号表示).

//i 将取值: 0, 1, 2, 3, 4, 5象在 (i in [0..5]) { //伴随 i的动作 }代码块中

JavaFX 过程

JavaFX 过程以operation 关键字为标志。一个简单的例子:

 

 

 

   JavaFX 类使用class关键字. 一个 JavaFX 类能够使用extends 关键字继承多个类使用逗号分割这些类的名字。在花括号中间你可以放属性、方法和过程,例如下面的例子:

 

 

class Order {

attribute order_nr: String;

attribute ordertype: Order inverse Order.products;

attribute products: Order* inverse Order.ordertype;

function getOrderNr(): String;

operation addOrder(order: Order);

}

     注意属性使用attribute关键字声明,方法体和过程不在类体中,它们单元定义在类声明以后,在下文你很快就能看到。 inverse 子句是一个可选项 ,它表示一种同在类中另一个属性的双向关系。在这个案例中JavaFX将自动完成更新(插入、替代和删除)你能在Java.net上找到更完整的文档

熟悉JavaFX

    在本小节,您将会看到一系列的小例子,这些例子覆盖JavaFX的各种特性和功能。主要目的是让你熟悉JavaFX代码和JavaFX应用程序的逻辑。第二个目标是当你需要开发仅仅需要几行代码就会有非常酷的GUI,动画和好的效果时候使你确信JavaFX值得好好研究一下。所有列出的例子将介绍关于JavaFX的技巧。每一个例子只使用很少的描述处理,所以不要想找到大量的注释。所有这些可访问的例子你都是你自己就能运行的,所以让我们开始吧。当我们需要使用System.out.println 打印属性值时候,你可以把它的名字放进含有引用的字符串,象源码列表2中所示的那样。

源码列表2

//带有应用文本的表达式

import java.lang.System;
var mynumber:Number = 10;
System.out.println("数字是: {mynumber}");

 结果

·                     ?: 可选的(可能为 null)

·                     +: 1或多个

·                     *: 0或多个

源码列表3

//变量计数

import java.lang.System;
var mynumbers:Number* = [1,2,7];
System.out.println("数字是: {mynumbers}");

 结果

源码列表 4

//变量类型是可选的

import java.lang.System; 
var days = ["Monday,","Friday,","Sunday"]; 
System.out.println("你必须工作: {days}");

 

结果: 你必须工作: Monday, Friday, Sunday
你可以使用sizeof 操作符得到一个数组的大小:

源码列表 5

//得到一个数组的大小

import java.lang.System;
var lotto = [21,30,11,40,5,6];
System.out.println("数组大小:{sizeof lotto}");

 结果

您能使用 [] 操作符得到满足指定条件的子数组。条件放在 [] 中作为布尔判断 。这个与XPath 谓词相似.

源码列表 6

//使用[] 操作符 -与 XPath相似

import java.lang.System;
var mynumbers = [1,2,7,3,30,15,14,6,4];
var numbers = mynumbers[n|n < 10]; 
System.out.println("小于10的数字为: {numbers}");

 结果

源码列表 7

//返回指定序数位置的数组中的元素

import java.lang.System;

var mynumbers = [1,2,7,3,30,15,14,6,4]; 
var number_four = mynumbers[indexof . == 4]; 
System.out.println("数字4:{number_four}");

 结果

·                     as first: 在第一个位置插入

·                     as last:在最后一个位置(默认)插入

·                     before: 在前一个位置插入

·                     after:在下一个位置插入

你可以使用 delete 语句从一个数组中删除一个元素.

源码列表8

//插入和删除语句
import java.lang.System;
var mynumbers = [1,2,7]; 
System.out.println("Before inserting anything: {mynumbers}");
insert 10 into mynumbers;
System.out.println("After inserting at the end the \"10\" value:{mynumbers}");
insert [8,6,90] as first into mynumbers; 
System.out.println("After inserting at the first positions the \"8,6,90\" values:{mynumbers}");
insert 122 as last into mynumbers;
System.out.println("After inserting at the end the \"122\" value:{mynumbers}");
insert 78 before mynumbers[3];
insert 11 after mynumbers[3];
System.out.println("After inserting the \"78\" and \"11\" values before/after the 3rd element:{mynumbers}");
delete mynumbers[. == 122];
System.out.println("After deleting:{mynumbers}");

 结果

JavaFX中的一个非常好的功能是list。这个功能使用 select 和 foreach 操作符实现。这有两个例子(一个使用 select 和使用 foreach) 得到指定间隔的奇数。

源码列表9

//JavaFX中的 select 和 foreach 操作符

import java.lang.System; 
function odd(p:Number) 
{ return select i from i in [1.0 ..p]
 where (i%2 == 0.0); 
}

var result = odd(10.0); 
System.out.println("Odd numbers:{result}");

 结果

源码列表10 ( 源码列表 9相同, 但是有 foreach)

//JavaFX中的select 和 foreach 操作符

import java.lang.System; 
function odd(p:Number) { 
       return foreach (i in [1.0 ..p] 
     where (i%2 == 0.0)) i; 
     } 
var result = odd(10.0);
System.out.println("Odd numbers:{result}");

 这个例子显示了

源码列表11

//JavaFX中的 select 和 foreach 操作符

import java.lang.*;
import javafx.ui.*; 
import javafx.ui.canvas.*;
Frame { 
centerOnScreen: true 
visible: true 
height: 500 
width: 500 
title: "Foreach demo..." 
onClose: operation() {
System.exit(0);
} 
content: ScrollPane { 
background: white 
view: Canvas {
 content: bind 
foreach (i in [1..8], j in [1..8]) 
Rect { x: i*30 y: j*30 width:30 height:30 fill: Color {red: (100+i) green: (100+j) blue: (100+(i*j))
} 
stroke:white 
strokeWidth:1 } }

}

}

  


图四. 运行源码列表 11

使用双箭头括号引用为JavaFX关键字的变量名或者属性名,如下所示。

源码列表 12

//标志符引用

import java.lang.System;

for (<<for>> in [0..3]) {

System.out.println("for = {<<for>>}");

}

 结果

当你需要开发Swing接口时,JavaFX 是一个伟大的工具,因为 JavaFX 考虑了非常多用来降低代码量和同javax.swing.*包并存友好。在上一节(使用NetBeans5.5中的JavaFX插件测试Hello World应用程序),你看到了创建一个窗体是如何容易。这有两个更好的例子:创建按钮和文本框。

源码列表 13

import javafx.ui.*;

import java.lang.System;

Frame{

content: Button { text: "Exit" action: operation() { System.exit(0); } }

visible: true

}

  


图五. 运行源码 13

源码列表14

import javafx.ui.*;

Frame {

content: GroupPanel { var myRow = Row { alignment: BASELINE }

var label_col = Column { alignment: TRAILING }

var field_col = Column { alignment: LEADING }

rows: [myRow] columns: [label_col, field_col]

content: [SimpleLabel { row: myRow column: label_col text: "Type your text here:" }, TextField { row: myRow column: field_col columns: 50 }] }

visible: true

};

  


图六. 运行源码 14

Java.net 也有使用JavaFx创建 Swing接口的教程。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zfinch/article/details/83705337

智能推荐

测试工具大全(各类测试工具简介)-程序员宅基地

文章浏览阅读2.3k次。企业级自动化测试工具WinRunner 提名理由:Mercury Interactive公司的WinRunner是一种企业级的功能测试工具,用于检测应用程序是否能够达到预期的功能及正常运行。通过自动录制、检测和回放用户的应用操作,WinRunner能够有效地帮助测试人员对复杂的企业级应用的不同发布版进行测试,提高测试人员的工作效率和质量,确保跨平台的、复杂的企业级应用无故障发布及长期稳

Oracle数据库一些个人常用的小sql-程序员宅基地

文章浏览阅读84次。1、SELECT * FROM ALL_TAB_COMMENTS WHERE OWNER = '用户' AND COMMENTS LIKE '%表注释%'; //查询表2、SELECT REPLACE(REPLACE(REPLACE(TIME,' ','') ,'-',''),':','') FROM ADMINTEST;//替换3、SELECT DECODE('李浩','李','L...

OpenCV之色彩空间与色彩空间转换_cv 色彩mask-程序员宅基地

文章浏览阅读96次。python代码:import cv2 as cvsrc = cv.imread("test.jpg")cv.namedWindow("rgb", cv.WINDOW_AUTOSIZE)cv.imshow("rgb", src)# RGB to HSVhsv = cv.cvtColor(src, cv.COLOR_BGR2HSV)cv.imshow("hsv", hsv)# RGB to YUVyuv = cv.cvtColor(src, cv.COLOR_BGR2YUV)cv_cv 色彩mask

【STM32 .Net MF开发板学习-07】全屏位图无闪烁显示-程序员宅基地

文章浏览阅读54次。16位320*240的位图大小为150K字节,而对于EM-STM3210E开发板来说,RAM仅有128K,远不够显示一幅完整位图,红牛的开发板即使有256K的RAM,但是刨去堆、栈及TinyCLR本身所用,剩下的也不多了,所以要显示全屏位图,必须分块显示。 但是这样带来两个问题,一幅图要分块制作,相当繁琐,不过这个可以升级TBConvert程序,让其支持自动分块功能..._stm32无闪烁显示

SwitchLayout安卓最佳切换动画-程序员宅基地

文章浏览阅读1.6k次。switchLayout:1.Activity视图切换库,同时兼容View的动画2.基础动画特效15个,每个可扩展8个,大概120种特效可以媲美IOS视图切换动画的Android视图切换动画特效库SwitchLayout 的1.0jar包下载地址和Demo下载地址:http://pan.baidu.com/s/1dD6baLV源码和demo在github地址

查看服务器上Docker镜像 latest具体版本_docker latest版本-程序员宅基地

文章浏览阅读1.2w次,点赞6次,收藏11次。以我本地装的redis为例,此处看到TAG为latest思想:通过docker image inspect的命令查看镜像信息,通过grep过滤想要的版本数据命令格式docker image inspect (docker image名称):latest|grep -i version结果如下,可以看到redis的版本为5.0.7..._docker latest版本

随便推点

bat脚本中如何多次键盘输入并判断_Nordic的BLE芯片如何OTA-程序员宅基地

文章浏览阅读122次。本文档基于芯片NRF52832和NRF52840,SDK版本为nRF5_SDK_16.0.0,系统为windows。在github上有一个类似官方的教程,按该教程来做是没问题的,只是有些地方说的并不是很清楚,没有讲到为什么,该教程地址是:https://github.com/gamnes/nRF52832-buttonless-dfu-development-tutorial开始之前是,需要准备一..._python bat 多次输入

JPA, hibernate, jdbcTemplate(建议使用)区别_jpa和jdbctemplate-程序员宅基地

文章浏览阅读2.3w次,点赞9次,收藏25次。Hibernate批量处理海量其实从性能上考虑,它是很不可取的,浪费了很大的内存。从它的机制上讲,Hibernate它是先把符合条件的数据查出来,放到内存当中,然后再进行操作。实际使用下来性能非常不理想.spring jdbctemplate和hibernate在处理简单查询操作时,效率基本相同,甚至hibernate的效率要略高一些。但是在执行批量操作,繁琐操作时,hibernate的效_jpa和jdbctemplate

rundeck Got error 28 from storage engine-程序员宅基地

文章浏览阅读38次。任务列表不显示任何正在运行的任务,切换到历史任务,显示Got error 28 from storage engine.补判断为Mysql数据库问题。最终为mysql临时空间满造成。 ...

链接警告 LNK4098 -程序员宅基地

文章浏览阅读892次。链接警告 LNK4098defaultlib "library" conflicts with use of other libs; use /NODEFAULTLIB:library你试图链接相互不兼容的库。重要提示 目前运行时库包含预编译指令来阻止混合不同类型库的链接。如果你试图在同一个程序中使用不同类型的或者调试/非调试版本的运行时库,你将看到这个警告。举个例子,如果你编译一个文

10、ZigBee 开发教程之基础篇—CC2530 串口UART0收发字符串-程序员宅基地

文章浏览阅读1.2k次。文章目录1、实验目的2、实验设备3、实验相关电路图4、实验相关寄存器5、源码分析6、实验结果1、实验目的1)掌握 CC2530 芯片串口配置与使用2)收到 PC 发送过来的数据,然后收到一整串数据之后,通过串口将该数据发送回去。  注:嵌入式开发中,当程序能跑起来后,串口是第一个要跑起来的外设,所有的工作状态,交互信息都会从串口输出。用的USB转串口芯片是世界上最好的串口芯片 FT232,高级 USB 串口线都用该芯片。2、实验设备硬件:1、PC机一台;2、ZigBee(CC2530)(底板、核

win7(32/64)+apache2.4+php5.5+mysql5.6 环境搭建配置-程序员宅基地

文章浏览阅读863次。win7(32/64)+apache2.4+php5.5+mysql5.6 环境搭建配置分类: php 2014-03-29 01:26 5052人阅读 评论(6) 收藏 举报apache2.4php5.5mysql5.6首先要有耐心仔细读完全文,尤其是括号里面的注释。环境:win7 32.(64位的同理,下载相关软件必须是对应的64位版本) 所需软件:0.安装Apache的前必须安装VC11 v