Kenji Tachibana's Weblog

« 前の日(Dec月 3日, 2008年) | 日付別メイン | 次の日(Dec月 5日, 2008年) »

http://blogs.sun.com/kenji/date/20081205 2008年 12月 05日 金曜日

Sun Tech Day - JavaFX ハンズオンラボ

先日の Sun Tech Day で Java FX のハンズオンラボにご参加頂いた方、本当にありがとうございました。また、CD からイメージがうまくコピーされずに、あまり練習問題に取りかかれなかった方、本当にすみませんでした... JavaFX のリリースのタイミングとの兼ね合いで、どうしても事前に web サイトにおいておけなかったのです。誠に申し訳ありませんでした。
場所はどこになるか分かりませんが、正常に展開できる教材をおいていただけることになりましたので、そのうちアナウンスいたします。中身はとても面白いものだと思いますので、是非、もう一度チャレンジしてみていただけたらと思います。

... ところで、この教材に載っている Challenge はみなさんできましたか?
私もハンズオンラボの前にいくつかやってみたんですが、なかなか手応えのある問題もありました。
そこで、自分自身の勉強のために、これらをちょっと blog で解いてみようかと思います。

GUI Challenge: 2 つのテキストフィールド、ラベルを HBox を使って配置し、どちらか片方のテキストフィールドに入力をすると、もう片方も同じ入力が表示されるアプリケーション

これは、手始めなので簡単、と思って


content: HBox {
content: [
SwingTextField {
width: 100
text: bind a with inverse
},
SwingLabel {
text: " <= bi-directional bind => "
},
SwingTextField {
width: 100
text: bind a with inverse
}
]
}

というコードを Ex2_GUI_bind プロジェクトの、SimpleBind.fx に入れてみたら、動くには動いたのですが、
右側のテキストフィールドを、数回変更すると、途中から思うように動かなくなってしまいました...
bug っぽいですが、双方向に bind かけているので、何となくそんなこともおきそうな気がします。

で、そうなら、どこかのタイミングで表示する String をクリアしてしまえばいいのでは、と思い、下記のようなスクリプトを書いてみたら、うまく行きました。これは、テキストフィールドをクリックしたときに、string を "" にするというアクションを入れたものです。

実行結果:


サンプルスクリプト:


package guiexamples;
import javafx.ext.swing.*;
import javafx.scene.*;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.*;
import javafx.stage.*;

Stage {
width: 400
height: 60
var a: String = "Hello";
title: "Echo TextField"
scene: Scene {
content: [
Group {
content: HBox {
content: [
SwingTextField {
width: 100
text: bind a with inverse
},
SwingLabel {
text: " <= bi-directional bind => "
},
SwingTextField {
width: 100
text: bind a with inverse
}
]
onMouseClicked: function(evt: MouseEvent):Void {
a = "";
}
}
}
]
}
visible: true
}

ちょっと、強引な感じですが、とりあえず Challenge GUI はクリアということで。

JavaFX 1.0 リリース

Java FX 1.0 が等々リリースされました!

Java FX メインページ

サンプルを早速起動してみようとクリックすると... あれれ、なんだか反応しませんね。
アクセス数が多すぎてパンクしてしまったのでしょうか?うれしい悲鳴だったらよいのですが。
現在、 Learning the JavaFX Script Programming Language と、 Building GUI Applications With JavaFX の日本語化を進めています。GUI の方は大体仕上げっていて、私も試してみましたが、なかなか面白いチュートリアルです。
気に入っているのは、プカプカ浮かぶ雲のアニメーションを作るチュートリアルです。

Creating Animated Objects

あー、こんな感じで面白いアニメーション作れるだー、と思いました。
試して見る際は、ちょっと注意点がありまして、

1. ソースコードの Image{url: "/docs/books/tutorial/2d/basic2d/examples/images/weather-sun.png"}
は、相対パスになっていてこのままでは読み込んでくれません。

Image{url: "http://java.sun.com/docs/books/tutorial/2d/basic2d/examples/images/weather-sun.png"}

と指定してあげる必要があります。

2. このソースコードには、package の指定がありません。なので、NetBeans で、JavaFX のプロジェクトを作って、スケルトンを全部消してしまって (package の定義も)、copy & paste すると、


Exception in thread "main" java.lang.NoClassDefFoundError: javafxapplication8/Main
Caused by: java.lang.ClassNotFoundException: javafxapplication8.Main
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: javafxapplication8.Main. Program will exit.

なんてエラーがでてきます。「Main がないってどういうこと??」ってしばらく悩んでいたんですが、
簡単なことでした。


Valid HTML! Valid CSS!

This is a personal weblog, I do not speak for my employer.