初识JavaFX Script

本文介绍了一种由Sun公司发布的脚本语言JavaFXScript,该语言支持Java2D和JFC,可用于创建美观的界面。文章通过一个时钟示例展示了JavaFXScript的基本语法和功能,包括图形绘制和动画效果。

JavaFX Script 是sun公司在今年5月分发布的一种脚本语言,它支持java2D和JFC,可以做出比较漂亮的界面。

在进一步了解JavaFX Script后发现,JavaFX Script语法和java差不多,代码易懂。有点像VRML的风格,包括图形绘制,都和VRML差不多,不过他的语法功能比VRML强大。文件和java文件不一样,源代码是以.fx结尾,这个和java就不一样了。感觉它功能是强,不过还是要有对面向对象有深刻理解才能完全掌握它。这是一个JavaFX Script做出的时钟,和Applet有点相像吧。现在还没有想到如何应用这个。可能可以应用到WEB动画中,这可能会代替Applet.

源代码:

import javafx.ui.*;
import javafx.ui.canvas.*;
import java.util.Date;
import java.lang.Math;
import java.lang.System;
public class Timer {
 private attribute elapsed: Number;
 public attribute minutes: Number;
 public attribute seconds: Number;
 public attribute hours: Number;
 public attribute running: Boolean;
}

attribute Timer.elapsed = bind if running
then [1..20] dur 1000 linear
while running
continue if true
else 0;
trigger on Timer.elapsed = value {
 var now = new Date();
 minutes = now.getMinutes();
 seconds = now.getSeconds() + (now.getTime() % 1000)/1000;
 hours = now.getHours();
}

public class Clock extends CompositeNode {
 public attribute ticking: Boolean;
}

operation Clock.composeNode() {
 var t = Timer {running: bind ticking};
 return Group {
 var font = new Font("Dialog", "PLAIN", 15)
 var secs = bind t.seconds
 var mins = bind t.minutes + secs/60
 var hrs = bind t.hours + mins/60
 content:
 [Rect {
 height: 200
 width: 200
 fill: white
 },
 Circle {cx: 100, cy: 100, radius: 80, fill: white, stroke: black, strokeWidth: 1},
 Group {
 transform: translate( 100, 100 )
 content: foreach( i in [1..12] )
 Text {
 var radians = Math.toRadians( 30 * i - 90 )
 transform: [translate( 70*Math.cos( radians ), 70*Math.sin( radians ) )]
 content: "{i}"
 valign: MIDDLE, halign: CENTER
 }
 },
 Group {
 transform: translate(100, 100)
 var hourHand =
 Line {x1: 0, y1: 0, x2: 0, y2: -35,
 strokeWidth: 4, stroke: black
 transform: bind rotate(hrs*30, 0, 0)
 }
 var minuteHand =
 Line {x1: 0, y1: 0, x2: 0, y2: -55,
 strokeWidth: 2, stroke: black,
 transform: bind rotate(mins * 6, 0, 0)
 }
 var secondHand =
 Line {x1: 0, y1: 0, x2: 0, y2: -75,
 strokeWidth: 1, stroke: red,
 transform: bind rotate(t.seconds * 6, 0, 0)
 }
 content: [hourHand, minuteHand, secondHand]
 },
 Circle {cx: 100, cy: 100, radius: 3, fill: black, stroke: black }]
 };
}
// Wrap Clock program for command line usage
Frame {
 content: Canvas {
 content: Clock {ticking: true}
 } // Canvas
 visible: true
} // Frame
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值