SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

JavaFX 1.0 をいち早く体験してみる

JavaFX 1.0 Previewは0.7に比べてどこが変わったのか?

closeActionとfunction

 ただし、完全に旧Frameと同じというわけではなく、いくつか機能拡張されたところもあります。例えば、「closeAction」アトリビュートなどもその一つです。これは、ウインドウを閉じるときの動作を示すアトリビュートで、これを利用することでクローズボックスをクリックしたときの処理を簡単に組み込むことができます。

package fxsample;

import java.lang.System;
import javafx.ext.swing.*;

SwingFrame {
    title: "Title"
    width: 200
    height: 200
    visible: true
    content: Label {
        text: "new JavaFX!"
    }
    closeAction: function(){
        System.exit(0);
    }
}

 これが、closeActionを組み込んだサンプルです。ここでは、クローズボックスをクリックすると、System.exitを呼び出しプログラムを終了しています。

 このcloseActionには、functionが値として設定されているのが分かりますね。0.7のスクリプトに慣れている人なら「なぜ、function? operationではないのか?」と思われたはずです。

 結論から言うと、1.0では「operationがない」のです! 処理を記述するためのものはfunctionに統一されており、0.7でoperationを使って記述していた処理はすべてfunctionに書き換えることになります。

 これはかなり大きな仕様の変更ですが、考えてみれば0.7の「operationとfunctionを使い分けて書く」という書き方は、分かりにくく、あまり意味がない感はありました。functionへの統一は、ソースコードをよりシンプルにするという点で理解できるものでしょう。

Canvasによるグラフィック表示

 1.0で大きく変わったのは、Swingコンポーネント関係よりも、グラフィック表示関係でしょう。0.7では、Canvasの中にグラフィックのシェイプ・クラスを用意して図形を表示させていました。では、0.7でのごく簡単な図形描画のサンプルをあげましょう。FrameにCanvasを配置し、そこにCircleを使って円を表示するサンプルです。

0.7形式の記述
import javafx.ui.*;
import javafx.ui.canvas.*;

Frame {
    title:"タイトル"
    width:200
    height:200
    visible:true
    content: Canvas {
        content: [
            Circle {
                cx: 100, cy: 80
                radius: 50
                fill: red
            }
        ]
    }
}

 これを、1.0のスクリプトとして書き直してみましょう。1.0でも、SwingFrameにCanvasを配置してグラフィックを描画することは可能です。では、今のサンプルを1.0で書き直してみましょう。

1.0形式の記述
package fxsample;

import javafx.ext.swing.*;
import javafx.scene.geometry.Circle;
import javafx.scene.paint.Color;

SwingFrame {
    title: "Title"
    width: 200
    height: 200
    visible: true
    
    content: Canvas {
        content: [
            Circle {
                centerX: 100, centerY: 80
                radius: 50
                fill: Color.RED
            }
        ]
    }
}
図9 赤い円を表示する。
図9 赤い円を表示する。

 ここでは、SwingFrameのcontentにCanvasを組み込み、その中のcontentにCircleを組み込んで円を表示しています。大体の流れは同じですが、よく見ると細かな点でいろいろと違いがあります。

 まず、パッケージの問題。1.0では、Circleなどの図形クラスはjavafx.scene.geometryパッケージに、また色を示すColorクラスはjavafx.scene.paintパッケージにそれぞれ用意されています。Circleというクラスそのものは変わっていませんが、中心位置のアトリビュートが「cx」「cy」から「centerX」「centerY」に変わっているなど、完全に同じというわけではありません。

 色の指定も、0.7では単に「red」とだけ指定すればよかったものが、「Color.RED」というようにColorクラスのアトリビュートに変わっています。このColorクラスは、0.7と比べるとかなり強化されており、新たに色を作成するためのfunctionも次のようにいろいろと用意されています。

Color.color([red], [green], [blue]);
Color.rgb([red], [green], [blue]);
Color.web([16進数のString]);

 非常に面白いのは、webでしょう。"#FF0000"というように、Webでの16進数によるテキストを使ってColorを生成することができます。またこれらのいずれも、最後に透過度の値を指定することもできます。

次のページ
FrameとStageによるグラフィック表示

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2990 2008/09/08 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー