JavaFx中的语句和表达式.docx
《JavaFx中的语句和表达式.docx》由会员分享,可在线阅读,更多相关《JavaFx中的语句和表达式.docx(21页珍藏版)》请在冰豆网上搜索。
![JavaFx中的语句和表达式.docx](https://file1.bdocx.com/fileroot1/2023-1/6/68f7ee35-bc0c-4688-91e3-5f871b017448/68f7ee35-bc0c-4688-91e3-5f871b0174481.gif)
JavaFx中的语句和表达式
JavaFx中的语句和表达式
JavaFx是一个基于表达式的语言,所有的语句都是由表达式组成的。
表达式的特征就是有零个或者多个输入,产生零个或者一个输出。
JavaFx的表达式包括条件表达式,循环表达式,代码块(block)。
我们先来看一个简单的脚本:
expression01.fx
packageexample;
importjava.lang.Math;
importjava.lang.System;
varrand=(Math.random()*100).intValue();
vars:
String=null;
if(randmod2==0){
s="randiseven"
}else{
s="randisodd"
};
System.out.println(s);
先简单解释一下,这段代码先产生一个随机整数,然后判断是否偶数。
这里的mod操作,也可以写作Java中比较熟悉的%,rand%2==0,可能很多人会比较习惯这种写法。
编译运行看结果:
#javafxcexpression01.fx-d.
#javafxexample.expression01
randisodd
#javafxexample.expression01
randisodd
#javafxexample.expression01
randiseven
代码块表达式
代码块(block)是在{...}之间的一系列语句(可以是表达式或者声明、定义),语句之间用';'分隔。
既然我们说block是一个表达式,表达式是有值的。
代码块的值就等于所执行的最后一个语句的值。
也就是说,如果最后一个语句是一个表达式的话,这个表达式的值即block的值,如果不是表达式,则block的值是一个Void类型的值。
看一个例子:
expression02.fx
packageexample;
importjava.lang.System;
varnums=[5,7,3,9];
vartotal={
varsum=0;
for(ainnums){sum+=a};
sum;
}
System.out.println("Totalis{total}");
这段脚本遍历数组求和,最后sum;表达式语句结束,把sum的值作为这个block的值。
运行看结果:
#javafxcexpression02.fx-d.
#javafxexample.expression02
Totalis24
范围表达式
范围表达式用于表示一串连续数字。
定义格式为,从起始值开始,到终止值结束,指定步长,范围表达式中包含终止值:
[起始值..终止值]
[起始值..终止值step步长]
步长可以省略,默认为+1,或者,可以指定另外一个值作为步长。
看代码:
expression04.fx
packageexample;
importjava.lang.System;
varnums=[0..3];
System.out.println(nums==[0,1,2,3]);//printstrue
System.out.println(nums);
varnums2=[1..10step2];
System.out.println(nums2==[1,3,5,7,9]);//printstrue
System.out.println(nums2);
编译运行,看结果:
#javafxcexpression04.fx-d.
#javafxexample.expression04
true
[0,1,2,3]
true
[1,3,5,7,9]
若想创建一个递减的数组,则终止值必须小于起始值,并且,步长为负值即可。
看代码:
expression05.fx
packageexample;
importjava.lang.System;
varnums=[3..0step-1];
System.out.println(nums==[3,2,1,0]);//printstrue
System.out.println(nums);
运行看结果:
#javafxcexpression05.fx-d.
#javafxexample.expression05
true
[3,2,1,0]
条件表达式
JavaFx的条件表达式基本和Java的写法是一样的,if(逻辑判断){条件成立}else{条件不成立}。
所不同的是,{...}部分在JavaFx里面,是一个代码块表达式,是一个值,并且,整个条件表达式也是一个值。
看一个条件表达式的简单例子:
expression03.fx
packageexample;
importjava.lang.System;
varname="BeiJing";
varvalue=if(name=="BeiJing"){
System.out.println("Hi,{name}");
name;
}
else{
System.out.println("Hello");
"Other";
}
System.out.println("Value:
{value}");
这段脚本里面,我们把条件表达式的值给利用起来了。
把条件表达式放在等号的右边,赋值给变量value。
条件判断成立,执行成立代码块,首先输出一个Hi,向BeiJing打个招呼,最后,name表达式结束,作为block的值,这个值就是条件语句的值,赋值给value变量。
#javafxcexpression03.fx-d.
#javafxexample.expression03
Hi,BeiJing
Value:
BeiJing
条件表达式也是允许嵌套的,如果您足够冷静的话,可以尝试嵌套很多层看看,不过,我建议还是代码可读性优先。
由于JavaFx的条件表达式本身就是表达式,Java中的三目运算符?
:
就不再需要了。
循环表达式
for循环
for的语法在讲数组的时候,已经提及了。
JavaFx的for跟Java的for的用法不同,必须基于一个数组进行遍历。
循环表达式实际上就是反复执行一个代码块(循环体部分),每次执行结束代码块的值作为改循环表达式的一个元素。
看代码:
expression06.fx
packageexample;
importjava.lang.System;
//得到各个元素的平方值
varval1=for(iin[1..5]){
System.out.println("{i}power{i*i}");
i*i;
}
System.out.println(val1); //[1,4,9,16,25]
结果为:
#javafxcexpression06.fx-d.
#javafxexample.expression06
1power1
2power4
3power9
4power16
5power25
[1,4,9,16,25]
while循环语句
基本和Java中的一样,不过,{}不能省略,JavaFx中,循环体是一个代码块。
看代码:
expression07.fx
packageexample;
importjava.lang.System;
vari=0;
while(i<10){
if(i>5){
break;
}
System.out.println("i={i}");
i+=1;
}
跟for表达式不同,我们无法获得while表达式的返回值。
运行结果:
#javafxcexpression07.fx-d.
#javafxexample.expression07
i=0
i=1
i=2
i=3
i=4
i=5
其他类型
return表达式
return用法和Java中一样:
functionadd(x,y){
returnx+y;
}
throw语句
throw跟Java中类似,只有从Throwable继承的类才能throw和catch。
importjava.lang.Exception;
functionfoo(){
thrownewException("thisisajavaexception");
}
functionbar(){
throw"justastring";
}
try...catch语句
try...catch跟Java中类似,只是形式上有所改变,长得是JavaFx的样子。
try{
throw"Hello";
}catch(s:
String){
System.out.println("caughtaString:
{s}");
}catch(any){
System.out.println("caughtsomethingnotaString:
{any}");
}finally{
System.out.println("finally...");
}
break,continue语句
和Java中类似,用于终止,跳过循环语句。
看例子:
expression08.fx
packageexample;
importjava.lang.System;
functionfoo(){
for(iin[0..10]){
if(i>5){
break;
}
if(imod2==0){
continue;
}
System.out.println(i);
}
}
functionbar(){
vari=0;
while(i<10){
if(i>5){
break;
}
if(imod2==0){
i+=1;
continue;
}
System.out.println(i);
i+=1;
}
}
foo();
System.out.println("*****************************");
bar();
运行结果:
#javafxcexpression08.fx-d.
#javafxexample.expression08
1
3
5
*****************************
1
3
5
JavaFX之1JavaFx小例子
2008年12月30日星期二22:
55
12月4日,SUN公司终于推出了基于JAVA语言的平台JavaFx1.0版本。
这个平台建立在其广泛应用的Java编程语言的基础上,旨在建立大量可在电脑和手机上运行的网络程序。
Java一直以来就是编程语言,但是随着JavaFX的发布,Sun公司开始允许将编程内容创新这一任务转移到以设计艺术为重点而非编程科学为重点的设计人员身上。
最近看了一下JavaFx的API的,给大家看看JAVAFX的小例子。
其实看的出来,JAVAFX的界面效果实在是比Swing好太多了。
首先需要去SUN公司下载JavaFXSDK,安装之后自动配置了环境变量,不需要你自己动手。
不过再安装JavaFX之前需要下载JavaSE6.0Update11也就是JavaSE的最新版本.
下面是JavaFx的例子和效果图。
第一个:
importjavafx.stage.Stage;
importjavafx.scene.paint.Color;
importjavafx.scene.text.Font;
importjavafx.scene.text.Text;
importjavafx.scene.Scene;
Stage{
title:
"一个JAVAFX的例子"
scene:
Scene{
fill:
Color.ORANGE
content:
[
Text{
content:
"欢迎来到JAVAFX的世界"
x:
25y:
25
fill:
Color.BLACKfont:
Font{size:
10}
}
Text{
content:
"这是第二个标签"
x:
50y:
50
fill:
Color.BLACKfont:
Font{size:
15}
}
]
}
}
第二个:
importjavafx.stage.Stage;
importjavafx.stage.StageStyle;
importjavafx.scene.Scene;
importjavafx.scene.paint.Color;
importjavafx.scene.text.Text;
importjavafx.scene.text.Font;
importjavafx.ext.swing.SwingButton;
importjavax.swing.JOptionPane;
Stage{
title:
"Applicationtitle"
width:
250
height:
80
s
tyle:
StageStyle.TRANSPARENT
scene:
Scene{
fill:
Color.ORANGE
content:
[
SwingButton
{
text:
"Click..."
action:
function():
Void{
JOptionPane.showMessageDialog(null,"欢迎~!
")
}
translateX:
90translateY:
10
}
SwingButton{
text:
"Myself"
action:
function():
Void{
JOptionPane.showMessageDialog(null,"这是我自己加上去的按钮哦!
")
}
translateX:
150translateY:
10
}
]
}
visible:
true
}
【IT168技术文档】在JavaFX1.0发布之后,本人撰写的文章JavaFX和Java之间的互操作性被各网站转载。
文中总结了3种从Java调用JavaFX的方法。
这三种方法分别为:
1.用ScriptEngineManager类。
这是基于JSR-223规范的java脚本API(scriptingAPI)。
可以在java程序中运行一些脚本,如JavaFXscript,javascript等。
2.通过JavaFXreflectionAPI。
这是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:
在代码中,这3句是创建JavaFX类javatest.MyChart实例,
Contextcontext=FXLocal.getContext();FXClassTypeinstance=context.findClass("javatest.MyChart");ObjectValueobj=(ObjectValue)instance.newInstance();
而一下这句则是把JavaFX实例转化为Java可用的对象:
JavaInterfaceji=(JavaInterface)obj.asObject();
如果你用的是NetBeansIDE,你可以在项目属性中把javatest.JavaTest类设为主类(Mainclass)(即启动类)。
编译之后会生成一个javatest.jar文件。
程序运行的结果如图:
在命令行中可以采用以下方式:
javafx-jarjavatest.jar
实际上,可以用纯Java的方式来启动程序,只要把JavaFX的运行环境带上即可,如:
JavaFX程序例子、教程
java-Djava.library.path=""-classpath""-jarjavatest.jar
因为JavaFX需要的jar文件很多,因此这种“最纯”的java方法使用起来比较麻烦。
我觉得还是用javafx命令简洁些,而且javafx就是上述java命令的封装而已。
Chapter 1:
数据类型
1.1基本类型
JavaFX语言提供四种基本类型:
String(字符串)、Boolean(布尔)、Number(数值)和Integer(整数)。
这些类型相当于Java 的如下类型:
JavaFX Java
String java.lang.String
Boolean java.lang.Boolean
Number java.lang.Number
Interger byte,short,int,long,BigInteger
Example:
var s:
String="Hello" ;
s.toUpperCase(); // "HELLO"
s.substring
(1);// "ello"
同时还要说明一点,JavaFX的字符串可以用双引号,也可以用单引号。
vars='Hello';
与 vars= "Hello"; 是等价的。
-------------------------------------------------------------------------------------------------------------------------
注意:
JavaFX中字符串的连接与java不同,JavaFX不支持+连接字符串。
连接方式如下:
方法一:
var s:
String="Hello";
var s1="{s}World";
方法二:
JavaFX提供了concat()方法连接两个字符串
vars1="Hello".concat("World");
-----------------------------------------------------------------------------------------------------------------------
varn:
Number=12.5;
n.intValue(); // 12
(12.5).intValue();// 12
varb:
Boolean=true;
bintstanceofBoolean;//true
下面我们用个Demo来体验一下这些基本类型的使用吧!
在Netbeans6.1中文件->新建项目->样例->JavaFX 展开节点在BestPractice中任选一个例子。
我这里是选的是transform中的Rotate。
在源包的transform中打开Rotate.fx文件。
可以看到下面这样的代码。
packagetransform;
importjavafx.gui.*;
importjavafx.animation.*;
importjava.lang.Math;
importjava.util.Random;
varangle:
Number=0.0;
varjitter:
Number=0.0;
varrandom:
Random=newRandom();
varticker:
Timeline=Timeline{
repeatCount:
Timeline.INDEFINITE
keyFrames: