2012-10-20

Java SE 7u9 / JavaFX 2.2.3 リリース

Java 7u9 が 10 月 16 日にリリースされました。また、NetBeans IDE 7.2.1 もリリースされています。週末になって、ようやく Fedora 17 (x86_64) にインストールすることが出来ました。32bit 版 Fedora や Windows でも確認中です。次回のアップデートは 2013 年 2 月 19 日に予定されています。

【参考サイト】

2012-09-09

トレンドチャートのサンプル

JavaFX でグラフのサンプルを作成しました。いろいろを試行錯誤しましたが、悔しいことに、まだ満足にチャートを駆使出来るまでには至っていません。とりあえず途中経過ということで、報告しておきます。使用環境は NetBeans IDE 7.2 on Fedora 17 (Linux) + Java SDK 7u7 です。
Sample_TrendGraph.java を以下に示します。
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sample_trendgraph;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.ScatterChart;
import javafx.scene.chart.XYChart;
import javafx.scene.effect.DropShadow;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

/**
 *
 * @author bitwalk
 */
public class Sample_TrendGraph extends Application {

    @Override
    public void start(Stage primaryStage) {
        final NumberAxis xAxis = new NumberAxis(0, 100, 10);
        final NumberAxis yAxis = new NumberAxis(-1, 1, 0.1);
        final LineChart grp = new LineChart<>(xAxis, yAxis);

        grp.setCreateSymbols(true);     
        grp.setAlternativeRowFillVisible(false);
        grp.setPrefSize(600, 400);
        grp.setTitle("トレンドチャート");      

        xAxis.setLabel("時間軸");
        yAxis.setLabel("データ値");

        DropShadow shadow = new DropShadow();
        shadow.setOffsetX(2);
        shadow.setColor(Color.GREY);
        grp.setEffect(shadow);

        final XYChart.Series series1 = new XYChart.Series();
        series1.setName("系列1");
        for (int i = 0; i <= 100; i++) {
            series1.getData().add(
                    new ScatterChart.Data(i, (Math.random() - 0.5) * 1.6));
        }
        grp.getData().addAll(series1);

        StackPane root = new StackPane();
        root.getChildren().add(grp);
        Scene scene = new Scene(root);
        scene.getStylesheets().add(Sample_TrendGraph.class.getResource("Chart.css").toExternalForm());

        primaryStage.setTitle("トレンドチャート");
        primaryStage.setScene(scene);
        primaryStage.show();

    }

    /**
     * The main() method is ignored in correctly deployed JavaFX application.
     * main() serves only as fallback in case the application can not be
     * launched through deployment artifacts, e.g., in IDEs with limited FX
     * support. NetBeans ignores main().
     *
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
}
Chart.css を以下に示します。
.chart-series-line {
    -fx-stroke-width: 1px;
    -fx-effect: null;
}

.chart-plot-background {
    -fx-background-color: #E0FFFF;
}
.chart-vertical-grid-lines {
    -fx-stroke: #0000C0;
}
.chart-horizontal-grid-lines {
    -fx-stroke: #0000C0;
}

.default-color0.chart-series-line {
    -fx-stroke: #800000;
}

.default-color0.chart-line-symbol {
    -fx-background-color: #800000, #C04000;
    -fx-background-radius: 0;
    -fx-background-insets: 1px;
    -fx-shape: "M2,2 L2,-2 -2,-2 -2,2 Z";
}

実行例を以下に示しました。

2012-09-02

Change to Java SE 7 and Java SE 6 Update Release Numbers

On August 30, 2012, Oracle released an out-of-schedule Security Alert remediating security vulnerabilities affecting Java running in web browsers.

To date all Critical Patch Updates (CPUs) for Java 7 have been odd numbers (JDK 7 Update 1, i.e. 7u1, 7u3, 7u5, etc.), while limited update releases have been even numbers (7u2, 7u4, 7u6, etc.). Since the August 2012 Security Alert release required the use of version numbers originally planned for a later CPU, Oracle will increment the release number for all subsequent Java 7 and Java 6 releases by two numbers in order to continue having CPUs as odd numbers and limited updates as even numbers.

The next Java CPU release, scheduled for October 16, 2012, will be renamed to Java SE 7u9 and Java SE 6u37.

This increment in the update release number does not change the scheduled dates or content of any future releases.


次回の Java のアップデートは、2012 年 10 月 16 日 に予定され、アップデート番号は Java SE 7u9 と Java SE 6u37 になるそうです。現在の開発版は、これにより 7u8 から 7u10 にシフトしました。

アップデート番号が奇数の場合はセキュリティなどの重大なパッチをあてたリリース、偶数の場合は、部分的な機能などの更新、追加したリリースに使われます。

アンテナの張り方が悪いのか、今回も Java SE 7u7 のリリースを知るのが遅れてしまいました。JavaFX が 2.2.1 になっているし…。今回は深刻な脆弱性が見つかったことを受けた緊急リリースのようです。


引用サイト

[1] Java SE 7 and Java SE 6 Update Release Numbers Change
[2] Java™ SE Development Kit 7 Update 7 Release Notes
[3] Oracle Java Development Kit 7u7 Downloads
[4] ニュース - 米オラクル、Java 7の深刻な脆弱性を塞ぐアップデートを緊急リリース:ITpro

2012-08-27

【備忘録】Java SE 7 開発版ダウンロードサイト

JavaFX のメーリングリストで出ている話題ですが、今だと、Java SE 7 update 8 と JavaFX 2.2.2 の weekly build がダウンロードできるようです。ダウンロードサイトを知らなかったので備忘録として残しました。

2012-08-19

8 月連休の成果

8 月の夏期休暇も今日が最後です。楽しいことは瞬く間に過ぎてしまうものですね。今回の夏期休暇では JavaFX をある程度使えるようにすることを目標に掲げていましたが、結局、JavaFX のコントロールのサンプルを一通り作ってみただけで終わってしまいました。XYChart などのチャートを利用して相関図や管理図などを描画するサンプル作成までたどり着きたかったのですが、時間切れです。

8 月 14 日に Java SE 7 update 6 がリリースされたことでインストールや動作確認に振り回されましたが、振り返ってみると休み中のリリースで却って良かったかもしれないと思っています。

さて、前述の JavaFX のコントロールのサンプルでは、なるべくシンプルな作りになるように努めていたため、CSS による修飾を加えませんでしたが、ここでは CSS を利用した簡単なサンプルを下記に紹介します。


まず、Java_version.java のソース:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package java_version;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

/**
 *
 * @author bitwalk
 */
public class Java_version extends Application {

    @Override
    public void start(Stage primaryStage) {
        Label lab11 = new Label("Java");
        lab11.setMinWidth(100);
        lab11.setId("title");
        GridPane.setConstraints(lab11, 1, 1);

        Label lab12 = new Label("JavaFX");
        lab12.setMinWidth(100);
        lab12.setId("title");
        GridPane.setConstraints(lab12, 1, 2);

        Label lab13 = new Label("Platform");
        lab13.setMinWidth(100);
        lab13.setId("title");
        GridPane.setConstraints(lab13, 1, 3);

        Label lab21 = new Label(System.getProperty("java.version"));
        lab21.setMinWidth(200);
        lab21.setId("value");
        GridPane.setConstraints(lab21, 2, 1);

        Label lab22 = new Label(System.getProperty("javafx.runtime.version"));
        lab22.setMinWidth(200);
        lab22.setId("value");
        GridPane.setConstraints(lab22, 2, 2);

        Label lab23 = new Label(System.getProperty("os.name"));
        lab23.setMinWidth(200);
        lab23.setId("value");
        GridPane.setConstraints(lab23, 2, 3);

        GridPane root = new GridPane();
        root.getChildren().addAll(lab11, lab12, lab13, lab21, lab22, lab23);
        root.setPadding(new Insets(5, 5, 5, 5));

        Scene scene = new Scene(root);
        scene.getStylesheets().add(Java_version.class.getResource("Java_version.css").toExternalForm());

        primaryStage.setTitle("Java version");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * The main() method is ignored in correctly deployed JavaFX application.
     * main() serves only as fallback in case the application can not be
     * launched through deployment artifacts, e.g., in IDEs with limited FX
     * support. NetBeans ignores main().
     *
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
}
次に、Java_version.css のソースです。
/* 
    Document   : Java_version
    Created on : 2012/08/19, 8:20:08
    Author     : bitwalk
    Description:
        Purpose of the stylesheet follows.
*/

root { 
    display: block;
}

.label {
    -fx-font-size: 16px;
    -fx-padding: 5px; 
    -fx-border-insets: 0px;
    -fx-border-width: 1px;
    -fx-border-color: black lightgray lightgray black;
    -fx-border-radius: 5px;
}

#title {
    -fx-text-fill: #000080;
    -fx-background-color: #FFC0FF;
}

#value {
    -fx-text-fill: #004000;
    -fx-background-color: #FFFFA0;
}
Fedora 17 上での実行例を以下に示しました。


このサンプルの動作とは関係ないことですが、JavaFX 2.2 がリリースされ Java SE 7 update 6 に同梱されるようになったのですが、JavaFX のバージョン番号にはビルド番号が残っています。Windows XP 上でも確認してみましたが同じでした。正式リリースでもビルド番号を残すということなのでしょうか…?


明日からきっと日々の仕事に忙殺されて時間を確保できなくなるので、この方面の話題はスローペースな情報更新になってしまいます。次のまとまった休みは…いつになるだろう。

2012-08-15

Java SE 7u6 / JavaFX 2.2 リリース

JavaFX 2.2 がリリースされました。Java SE 7 update 6 にバンドルされています。Windows, Mac OS X および Linux 用のパッケージが公開されています。Linux 用には ARM 版(ARM v6 および ARM v7)も公開されています。

また、Scene Builder 1.0 も公開されていました。こちらは Windows と Mac OS X に対応しています。 情報を収集するアンテナの巡らせ方が下手くそなのか、この手のリリースの情報はひどく突然のように感じます。たぶん、そろそろリリースするぞという情報がどこかで流れていると思うのですが、そこまでディープな開発情報を取りにいっていません。とにかく、Linux (Fedora 17) 上で動作確認を始めます。

追記


Oracle のサイトから jdk-7u6-linux-x64.rpm をダウンロード、インストールした後の NetBeans IDE 7.2 における JavaFX の設定例を以下に示しました。(Fedora 17)



追記 2


【参考サイト】

2012-08-14

JavaFX のサンプル

JavaFX を、まとめて時間が取れるこの夏期休暇に、ある程度使えるようになりたいと、楽しみにしていたのですが…、いざ休みに入ると、土日は、昼間はひたすら睡眠、夜間はオリンピックを見入ったりで、なかなか手をつけられません。

あっという間に月曜日になってしまい、慌てて理解の為のサンプルを作り始めました。まずはコントロールを一通り、浅くでもいいから理解してしまおうとしています。FXML の方は、JavaFX Scene Builder が Linux でも利用できるようになるまで待つことにしました。Linux にも対応してくれるものと勝手に期待していますが…。

さて(日が変わってしまいましたが)月曜日の成果です。微々たる数ですが、ハードコピーを紹介します。


   


下記のサイトにサンプルについてまとめはじめました。 夏期休暇が終わるころには、もっとサンプルが充実しているはずです。サンプルを作ることが目的ではありませんが、作りたいアプリケーションを本格的に作り始める前に、簡単なサンプルを作ってみてある程度使えるようにしておかないと、つまらないところで躓いてしまいます。ようやく使い甲斐がある GUI 系ライブラリに巡り逢えたので、確実に取り組んでいきたいと思っています。それにしても普段は週末ですら満足に時間を取れないのが悩みの種です。

2012-08-05

RadioButton サンプル

RadioButton のサンプルを紹介します。サンプルは下記からの引用なので、オリジナリティはありません。Fedora での動作確認結果の紹介が目的です。 実行環境は下記の通りです。
  • OS : Fedora 17 (x86_64) / LXDE(デスクトップ環境)
  • JDK : jdk-1.7.0_05-fcs.x86_64
  • JavaFX : javafx-sdk2.2.0-beta (build 19)
  • IDE : NetBeans IDE 7.2
実行結果を下記に示しました。

サンプルソースを下記に示しました。なお、(Calendar.png)、(Contact.png) および (Home.png) の三種類の画像を、ソースと同じディレクトリに保存しておく必要があります。

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package uiradiobuttonsample;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.RadioButton;
import javafx.scene.control.Toggle;
import javafx.scene.control.ToggleGroup;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
 *
 * @author bitwalk
 */
public class UIRadioButtonSample extends Application {

    final ImageView icon = new ImageView();

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) {
        Scene scene = new Scene(new Group());
        stage.setTitle("Radio Button Sample");
        stage.setWidth(250);
        stage.setHeight(150);

        final ToggleGroup group = new ToggleGroup();

        RadioButton rb1 = new RadioButton("Home");
        rb1.setToggleGroup(group);
        rb1.setUserData("Home");

        RadioButton rb2 = new RadioButton("Calendar");
        rb2.setToggleGroup(group);
        rb2.setUserData("Calendar");

        RadioButton rb3 = new RadioButton("Contacts");
        rb3.setToggleGroup(group);
        rb3.setUserData("Contacts");

        group.selectedToggleProperty().addListener(new ChangeListener() {
            @Override
            public void changed(ObservableValue ov,
                    Toggle old_toggle, Toggle new_toggle) {
                if (group.getSelectedToggle() != null) {
                    final Image image = new Image(
                            getClass().getResourceAsStream(
                            group.getSelectedToggle().getUserData().toString()
                            + ".jpg"));
                    icon.setImage(image);
                }
            }
        });

        HBox hbox = new HBox();
        VBox vbox = new VBox();

        vbox.getChildren().add(rb1);
        vbox.getChildren().add(rb2);
        vbox.getChildren().add(rb3);
        vbox.setSpacing(10);

        hbox.getChildren().add(vbox);
        hbox.getChildren().add(icon);
        hbox.setSpacing(50);
        hbox.setPadding(new Insets(20, 10, 10, 20));

        ((Group) scene.getRoot()).getChildren().add(hbox);
        stage.setScene(scene);
        stage.show();
    }
}

2012-08-01

JavaFX 2.2 build b19 ふたたび

JavaFX Developer Preview のサイトで JavaFX 2.2 がふたたび build b19 になっていました。Linux (x86_64) 用のファイル名は、javafx_sdk-2_2_0-beta-b19-linux-x64-25_jul_2012.zip です。JavaFX Scene Builder 1.0 も build b45 に戻っています。なんだったんでしょう?

2012-07-31

JavaFX 2.2 build b15?

JavaFX Developer Preview のサイトで 不思議なことに JavaFX 2.2 が build b19 から b15 に戻っています。JavaFX Scene Builder 1.0 も build b45 から b44 に戻っています。なにかサーバー側でトラブルでもあったのでしょうか?

2012-07-30

JavaFX 2.2 build b19

JavaFX Developer Preview のサイトで JavaFX 2.2 が build b19 になっていました。Linux (x86_64) 用のファイル名は、javafx_sdk-2_2_0-beta-b19-linux-x64-25_jul_2012.zip です。

2012-07-29

Button サンプル

Fedora 17 で NetBeans IDE 7.2 RC1 の動作報告を昨日したばかりだというのに、いつの間にか正式版が出ていました。情報についていけていなくて、ちょっと悔しいです。
さて、Button のサンプルを紹介します。サンプルは下記からの引用なので、オリジナリティはありません。Fedora での動作確認結果の紹介が目的です。 実行環境は下記の通りです。
  • OS : Fedora 17 (x86_64) / LXDE(デスクトップ環境)
  • JDK : jdk-1.7.0_05-fcs.x86_64
  • JavaFX : javafx-sdk2.2.0-beta (build 18)
  • IDE : NetBeans IDE 7.2
実行結果を下記に示しました。

サンプルソースを下記に示しました。なお、(not.png) と、(ok.png) の二種類の画像を、ソースと同じディレクトリに保存しておく必要があります。

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package uibuttonsample;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.effect.DropShadow;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.stage.Stage;

/**
 *
 * @author bitwalk
 */
public class UIButtonSample extends Application {

    private static final Color color = Color.web("#464646");
    Button button3 = new Button("Decline");
    DropShadow shadow = new DropShadow();
    Label label = new Label();

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) {
        Scene scene = new Scene(new Group());
        stage.setTitle("Button Sample");
        stage.setWidth(300);
        stage.setHeight(190);

        label.setFont(Font.font("Times New Roman", 22));
        label.setTextFill(color);

        Image imageDecline = new Image(getClass().getResourceAsStream("not.png"));
        Image imageAccept = new Image(getClass().getResourceAsStream("ok.png"));

        VBox vbox = new VBox();
        vbox.setLayoutX(20);
        vbox.setLayoutY(20);
        HBox hbox1 = new HBox();
        HBox hbox2 = new HBox();

        Button button1 = new Button("Accept", new ImageView(imageAccept));
        button1.setStyle("-fx-font: 22 arial; -fx-base: #b6e7c9;");
        button1.setOnAction(new EventHandler() {
            @Override
            public void handle(ActionEvent e) {
                label.setText("Accepted");
            }
        });


        Button button2 = new Button("Accept");
        button2.setOnAction(new EventHandler() {
            @Override
            public void handle(ActionEvent e) {
                label.setText("Accepted");
            }
        });

        button3.setOnAction(new EventHandler() {
            @Override
            public void handle(ActionEvent e) {
                label.setText("Declined");
            }
        });

        button3.addEventHandler(MouseEvent.MOUSE_ENTERED,
                new EventHandler() {
                    @Override
                    public void handle(MouseEvent e) {
                        button3.setEffect(shadow);
                    }
                });

        button3.addEventHandler(MouseEvent.MOUSE_EXITED,
                new EventHandler() {
                    @Override
                    public void handle(MouseEvent e) {
                        button3.setEffect(null);
                    }
                });


        hbox1.getChildren().add(button2);
        hbox1.getChildren().add(button3);
        hbox1.getChildren().add(label);
        hbox1.setSpacing(10);
        hbox1.setAlignment(Pos.BOTTOM_CENTER);

        Button button4 = new Button();
        button4.setGraphic(new ImageView(imageAccept));
        button4.setOnAction(new EventHandler() {
            @Override
            public void handle(ActionEvent e) {
                label.setText("Accepted");
            }
        });


        Button button5 = new Button();
        button5.setGraphic(new ImageView(imageDecline));
        button5.setOnAction(new EventHandler() {
            @Override
            public void handle(ActionEvent e) {
                label.setText("Declined");
            }
        });

        hbox2.getChildren().add(button4);
        hbox2.getChildren().add(button5);
        hbox2.setSpacing(25);

        vbox.getChildren().add(button1);
        vbox.getChildren().add(hbox1);
        vbox.getChildren().add(hbox2);
        vbox.setSpacing(10);
        ((Group) scene.getRoot()).getChildren().add(vbox);

        stage.setScene(scene);
        stage.show();
    }
}

参考サイト

[1] NetBeans IDE 7.2公開 - FindbugやJavaFX Scene Builderを統合 | エンタープライズ | マイナビニュース

2012-07-28

NetBeans IDE 7.2 RC1 と JavaFX 2.2

Beta の時は、インストールが出来ても起動しませんでしたが、NetBeans IDE の 7.2 RC1 では起動できましたので、7.1.2 から 7.2 へ開発環境を変更しました。OS は Fedora 17 (x86_64) です。
もうじき待ちに待った夏期休暇です。

普段は全然時間が取れないので、年末年始や 5 月あるいは 8 月の連休の時期に集中して好きなこと(現在は JavaFX のプログラミング)に取り組むことを楽しみにしているのですが、とりあえず今のところは、はやる心を抑えて、下記のチュートリアルのサイトからサンプルを入手、動作させて遊ぶ程度に留めています。
右の Embedded Media Player のサンプルのように、動画やサウンドを簡単に扱うことができるということには心が躍ります。
しかし、右のようなグラフを手軽にしかも自由に作成できることの方が、地味なようですが自分が作りたい統計解析ツールにとっては結構重要です。それに加えて、基本的な GUI コンポーネントについて、そのコントロールの仕方を整理したいと考えています。

今まで Swing でアプリケーションを作成するつもりで必要な情報の整理を進めてきましたが、Linux 上でも JavaFX がなんとか使えるようになり、これによって Java アプリケーションの GUI の表現能力を格段に向上させることが期待できるので、暫くは JavaFX にのめりこむことにします。

2012-07-21

JavaFX 2.2 build b18

JavaFX Developer Preview のサイトで JavaFX 2.2 が build b18 になっていました。Linux (x86_64) 用のファイル名は、javafx_sdk-2_2_0-beta-b18-linux-x64-17_jul_2012.zip です。また、NetBeans IDE の 7.2RC1 が公開されています。

2012-07-16

【備忘録】gvfs (補足)

gvfs のマウントポイントについて、下記の備忘録に書きましたが、情報が古くなっているので補足します。 少なくとも、最近使っている Fedora では、gvfs でネットワークドライブをマウントしても、マウントポイントが ~/.gvfs に生成されていません。mount コマンドで確認できます。以下に例を示しました。
$ mount
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
...
gvfs-fuse-daemon on /run/user/bitwalk/gvfs type fuse.gvfs-fuse-daemon (rw,nosuid
,nodev,relatime,user_id=1000,group_id=1000)
$ ls /run/user/bitwalk/gvfs
192.168.11.3 上の bitwalk
$ ls /run/user/bitwalk/gvfs/"192.168.11.3 上の bitwalk"
... 
もちろん、gvfs-mount コマンドも利用できます。
$ gvfs-mount -l
Drive(0): 320 GB Hard Disk
  Type: GProxyDrive (GProxyVolumeMonitorUDisks2)
  Volume(0): 105 GB ボリューム
    Type: GProxyVolume (GProxyVolumeMonitorUDisks2)
Drive(1): CD/DVD Drive
  Type: GProxyDrive (GProxyVolumeMonitorUDisks2)
Mount(0): 192.168.11.3 上の bitwalk -> smb://Workgroup;bitwalk@192.168.11.3/bitwalk/
  Type: GDaemonMount

2012-07-15

JavaFX 2.2 build b17

JavaFX Developer Preview のサイトで JavaFX 2.2 が build b17 になっていました。ちょっと油断していました、週末に公開されていた可能性があります。ちなみに Linux (x86_64) 用のファイル名は、javafx_sdk-2_2_0-beta-b17-linux-x64-10_jul_2012.zip です。

2012-06-30

JavaFX 2.2 build b15

JavaFX Developer Preview のサイトで JavaFX 2.2 が build b15 になっていました。意外と更新頻度が高いようです。更新の度に何が変わったのかが判ればいいのですが、残念ながら、公開されているパッケージの中にはそのような情報が含まれていません。

関連情報


2012-06-26

JavaFX 2.2 build b14

JavaFX Developer Preview のサイトで JavaFX 2.2 が build b14 になっていました。今回のビルドで何が変わったのかが解りませんが、今のところ Linux では JavaFX 2.2 のプレビュー版しか利用できないので、しばらくはプレビュー版の追っかけをします。

2012-06-17

Fedora 17 で JavaFX プログラミング

Fedora では、Java 7 を標準で利用できるようになったので、これで JavaFX のプログラミングができると楽しみにしていましたが、javafx のような RPM パッケージは、RPM Fusion からも出ている様子がありません。
Oracle JavaFX のサイトを見てみると JavaFX 2.2 のベータ版が、(いつの間にか)Linux x86_64 向けにも公開されていましたので、思い切って RPM のパッケージに頼らず、JavaFX に対応している最新の NetBeans IDE 上で、Linux 上でも JavaFX が使えるかどうか試してみることにしました。

以下は、試行錯誤した結果を整理したものです。

使用した環境

Fedora 17(x86_64 版)
Java および Eclipse による開発環境はインストール済み
デスクトップ環境は LXDE を使用

用意しておくパッケージ

NetBeans IDE 7.1.2
NetBeans IDE 7.1.2 ダウンロード
IDE の言語:日本語、プラットフォーム:Linux (x86/x64)で、サポートテクノロジー「すべて」のパッケージをダウンロードしてインストールしました。
JavaFX 2.2 build b13, Linux 64-bit (zip)
JavaFX Developer Preview
jdk-7u5-linux-x64.rpm
Java SE Development Kit 7 Downloads
試行錯誤の中で、Oracle の JDK が、Fedora から配布されている OpenJDK とは、少なくともインストールレベルでは衝突しなかったので、JavaFX を使う Java のプラットフォームバージョン用の Java に使ってみました。OpenJDK をそのまま使うこともできます。

NetBeans IDEのインストール

ルート権限で、ダウンロードしたインストーラを実行します。このインストーラを実行するには、Java の実行環境 (JVM) が必要です。
$ su
パスワード:
# sh netbeans-7.1.2-ml-linux.sh
インストーラを構成しています...
システムで JVM を検索しています...
インストールデータを抽出しています...
インストーラウィザードを実行中...

NetBeans IDE と JUnit について、ライセンス契約条件の同意が求められます。

インストール先は /opt 以下にしました。

インストールが開始されます。

無事インストールが終了したら、メニューから「プログラミング」>「NetBeans IDE 7.1.2」を選択して起動してみます。

JavaFX2.2 の展開と NetBeans IDE の設定

あらかじめダウンロードしておいた JavaFX の zip ファイルを展開します。ここでは /opt 以下に展開しています。
なお、必須ではありませんが、前述したように、Oracle のサイトで入手できる JDK の RPM パッケージもインストールしています。
# yum localinstall jdk-7u5-linux-x64.rpm
...
# cd /opt
# unzip /home/bitwalk/ダウンロード/javafx_sdk-2_2_0-beta-b13-linux-x64-13_jun_2012.zip
...
NetBeans IDE を起動して、メニューの「ツール(T)」から「Javaプラットフォーム(I)」を選んで、JavaFX が利用できるプラットフォームを追加します。これはデフォルトのプロットフォームでは JavaFX が利用可能になっていないためです。なお、ここで追加するプラットフォームには、前述の Oracle のサイトから入手した JDK を選択しています。

追加したプラットフォームには、JavaFX のタブが追加されていますので、このタブで、先ほど展開した JavaFX のフォルダーを指定します。

以上で、JavaFX を利用する環境が整いました。

Hello World

NetBeans IDE のメニューの「ファイル(F)」から「新規プロジェクト(W)」を選び、JavaFX のプロジェクトを作ると、(スケルトンとして)HelloWorld を表示するプログラムが自動に生成されます。


実行結果を以下に示しました。

また、FXML のサンプルも試してみました[2]。これを活用すれば、GUI のレイアウトが簡単にできそうです。

欲を言えば Eclipse で JavaFX のプログラミングができれば良いのですが、こういうことが無ければ NetBeans IDE を使うことがないので、この機会に NetBeans IDE の使い方を覚えて、JavaFX のプログラミングを楽しむことにします。


参考サイト

[1] NetBeans 7.1.2 on Fedora 17/16, CentOS/RHEL 6.2/5.7
[2] Getting Started with JavaFX: Using FXML to Create a User Interface