JavaFX 1.0 正式リリース
こちらで知ったのだが,つい先頃,JavaFX の1.0が正式にリリースされた.NetBeans 6.5で使えるようになっている.めでたい.
が!なんと驚くべきことに,ベータリリースと文法やらクラス階層やらが大きく変わっている.なんなんだ...というわけで,これまで書いたプログラムが全然動かん.0.7から1.0への際とは違って,表面的な違いのようにも見えるのでそれほど大変ではなさそうだが,先日書いたデモプログラムは,記憶が新しいうちに書き直しておかないと,今後動かなくなってしまいそうだ.
変更点のメモ
気がついた部分だけ.
- attribute がvar に
- これまではクラスのメンバ変数はattributeキーワードで宣言していたのだが,これがvarキーワードに統一された.
- overrideキーワードが必要に
- 親クラスのメソッドをoverrideする際には,override 修飾子で明示しなければならない.
- ファイルのトップレベルにstatementが書けない
- これまでは,トップレベルに直接statementを書いておくと,そのファイルを直接実行したときに実行されていたのだが,これがゆるされなくなった.runという関数を作り,そのなかに書かなければならない.(12/6追記: skrbさんからのコメントで,Mainファイルの場合はトップレベルにstatementが直接書けると教えていただいた.run関数が必要なのはMain以外のファイルの場合のみ.)
- Frameがない
- これまではFrameとSwingFrameのどちらかがウィンドウを作る際に必要だったのだが,両方ともなくなっている.びっくりだ.Stage を直接使うことになったらしい.
- javafx.async 追加
- 非同期処理のためのパッケージ.0.7にあったらしいが,1.0ベータにはなかった.
床屋
先日書いた床屋プログラムを正式版で動くようにしたもの.一番変わっているのは,一番runメソッドの部分.他は機械的な書き換えで大丈夫.
こころなしか,処理系の動作が軽くなったような気がする.処理系も改良されているのだろう.
package mytest; import javafx.scene.*; import javafx.scene.paint.*; import javafx.scene.shape.*; import javafx.scene.input.*; import javafx.scene.transform.*; import javafx.scene.text.*; import javafx.ext.swing.*; import java.lang.*; import javafx.animation.Timeline; import javafx.animation.KeyFrame; import javafx.animation.Interpolator; import javafx.stage.*; /** * @author nakada */ public class Barber extends CustomNode { var x: Integer; var y: Integer; var len: Number; var width: Number; var baseColor1: Color; var baseColor2: Color; var offset: Number = 0.0; var animate = Timeline { repeatCount: Timeline.INDEFINITE keyFrames: [ at (0s) {offset => 0.0}, at (1s) {offset => 30.0 tween Interpolator.LINEAR} ] }; function start() { animate.play(); } override function create(): Node { return Rectangle { x: bind x y: bind y width: bind width height: bind len arcWidth: bind width; arcHeight: bind width; fill: bind LinearGradient { startX: offset startY: offset endX: 30.0 + offset endY: 30.0 + offset proportional: false cycleMethod: CycleMethod.REPEAT; stops: [ Stop { offset: 0.0 color: Color.WHITE }, Stop { offset: 0.25 color: baseColor1 }, Stop { offset: 0.5 color: Color.WHITE }, Stop { offset: 0.75 color: baseColor2 }, Stop { offset: 1.0 color: Color.WHITE } ] }; } } } function run() { var s = Stage { scene: Scene {content: []} visible: true width: 230 height: 500 } var barber = Barber { x: 100 y: 100 len: 300 width: 30 baseColor1: Color.RED baseColor2: Color.BLUE }; insert barber into s.scene.content; barber.start(); }