ラベル JavaFX の投稿を表示しています。 すべての投稿を表示
ラベル JavaFX の投稿を表示しています。 すべての投稿を表示

2018-10-21

JavaFX 11 と Netbeans 9.0

Oracle は、先月(米国時間の 2018 年 9 月 25 日)に Java SE 11 / JDK (Java Development Kit) 11 の一般提供を開始しましたが、このリリースから JavaFX のパッケージが削除されてしまいました [1]。JavaFX でちょっとした GUI プログラムを作って業務にも使っていたので、しばらくは JDK 11 に移行せずに古い JDK を使い続けるしかないかなと思っていました。

しかし、JDK 11 がリリースされる一週間前の 9 月 18 日 (UTC) に、単独で JavaFX 11 がリリースされていたのでした [2]。JavaFX に関する情報収集に精を出していなかったせいもあって、JavaFX 11 の存在に気が付い時にはリリースから一カ月近くが経過していました💦。実は Java 11 のリリースノート [1] には、この JavaFX 11 についての情報も記載されていたのですが…、リリース・モデル [3] の変更についての話題に気を取られ、全然読んでいませんでした。

しかしこれで NetBeans 9.0 で JavaFX のアプリケーションのビルドができると意気込み、悪戦苦闘したものの、なんとか、こつこつ作っている JavaFX のアプリケーションのビルドに成功したのでした。そのアプリケーションは紹介できないので、テスト用にバージョンを確認する小さな JavaFX プログラムのスクリーンショットを載せました。

Windows 7 上での JavaFX 11 アプリケーション実行例

目的と Linux の使用環境

今回の目的は、Java 8 で利用していた JavaFX のプロジェクトを、Java 11 の環境へ移行することです。ただし、Netbeans 9.0 を開発環境に使っている場合に限定します。移行するサンプルとして JavaVersion という簡単なプロジェクトを使います。この記事の終わりにコードを紹介しています。

自宅で Linux 環境でも同じように Java 11 へ移行して、JavaFX 11 を利用できるかどうか確認しました。Fedora 29 beta から OpenJDK 8 と 11 を共存させていたのですが、OpenJDK 8 の方を完全に削除しました。使用環境は以下の通りです。

  • OS: Fedora 29 beta (x86_64)
  • IDE: Apache NetBeans IDE 9.0 (Build incubator-netbeans-release-334-on-20180708)
  • java-11-openjdk-11.0.0.28-1.fc29.x86_64
  • java-11-openjdk-devel-11.0.0.28-1.fc29.x86_64
  • java-11-openjdk-headless-11.0.0.28-1.fc29.x86_64
  • java-11-openjdk-javadoc-11.0.0.28-1.fc29.x86_64
  • java-11-openjdk-src-11.0.0.28-1.fc29.x86_64

Wayland に未対応

JavaFX 11 のリリースノート [4] を読むと、Ubuntu 18.04 で Wayland のウィンドウサーバーを有効にすると JavaFX 11 がクラッシュするとあります。これは、このバージョンから JavaFX のコードが GTK 3 へ移行したことに原因があるようです。これは Ubuntu 固有の問題ではなく、Fedora でも確認できました。

これを回避する方法として次の二点が紹介されています。

  1. Wayland を使わず Xorg を使う。
  2. 強制的に GTK 2 を使う。java -Djdk.gtk.version=2 ...

将来この問題が GTK 3 の環境下で解決されることを期待して、ひとまずログイン時にデフォルトの Wayland ではなく、Xorg を明示的に指定 (GNOME on Xorg) して対応することにします。

GNOME ログイン時に Wayland を無効に(GNOME on Xorg を選択する)

※ これからの説明は、参考サイト [5] の内容を確認し、自分の環境に合わせて書き直したものです。

JavaFX 11 のダウンロードとライブラリの登録

参考サイト [6] から、JavaFX Linux SDK (openjfx-11_linux-x64_bin-sdk.zip) をダウンロードして、適当なディレクトリに展開します。私は、ホームディレクトリ内に lib ディレクトリを用意しておいて、その中に展開しています。

Netbeans を起動して、メニューバーから Tools → Libraries を選び、Ant Library Manager ダイアログの画面左下の New Library ... ボタンをクリックして、展開しておいた /home/bitwalk/lib/javafx-sdk-11/lib/ 内の jar ファイルを選択して JavaFX という名前を付けてライブラリに登録しておきます。

JavaFX ライブラリの登録

Netbeans 9.0 で JavaFX のプロジェクトは作れない

JDK 11 には JavaFX 11 の SDK が含まれていないので当然ですが、Netbeans 上で JavaFX プロジェクトを作成することはできません。

JDK 11 での JavaFX プロジェクトの作成

Netbeans 9.0 でモジュール用プロジェクト ModuleTest を作成

メニューバーから Files → New Project... を選び、New Project のダイアログ画面の Choose Project のステップにおいて Categories のリストから Java、Projects のリストから Java Modular Project を選択して Next > ボタンをクリックします。

Name and Location ステップで、プロジェクト名などの設定をします。ここでは Project Name を ModuleTest として Finish ボタンをクリックしてプロジェクトの作成を完了します。

モジュール用プロジェクト ModuleTest の作成

ここでは、今まで Java のバージョンを表示する JavaFX のプロジェクト JavaVersion を新しく作成したモジュール用プロジェクトにコピーするため、プロジェクトのペインに表示しています。JavaVersion が赤字になっているのは、この環境ではエラーがあってビルドできないからです。

JavaFX ライブラリの追加

さて、作成したプロジェクト ModuleTest を選択、右クリックしてプロダウンメニューを表示、Properties を選択してプロジェクトのプロパティ画面を表示させます。

モジュール用プロジェクト ModuleTest のプロパティ画面表示

左側の Categories から Libraries を選び、右側の Compile タブを表示します。Compile-time Libraries で Modulepath の行右側の ボタンをクリックして、メニューから Add Library... を選びます。

Add Library のダイアログで、あらかじめ登録しておいた JavaFX を選択して Add Library ボタンをクリックして追加します。

Modulepath に JavaFX ライブラリが追加されたことを確認してから OK ボタンをクリックして Project Properties - ModuleTest のウィンドウを閉じます。

JavaFX ライブラリの追加

モジュールの作成

次に、再度作成したプロジェクト ModuleTest を選択、右クリックしてプロダウンメニューを表示、New → Module を選択して新しいモジュールを作成します。

モジュールの作成

ここでは Module Name を javafxApp として Finish ボタンをクリックします。

モジュール javafxApp モジュールの作成

するとモジュール定義ファイル module-info.java がクラスディレクトリ ModuleTest/src/javafxApp/classes のトップに生成されて、右側のエディタのペインに表示されます。

空のモジュール定義ファイル module-info.java

生成された module-info.java には、以下のように依存するモジュールと公開するモジュールを記述します。

リスト:module-info.java 

記述後の module-info.java は以下のようになります。

モジュール定義ファイル module-info.java

以前のプロジェクトで利用していたパッケージを ModuleTest プロジェクトへコピーします。

既存のパッケージを ModuleTest プロジェクトへコピー

メインプロヘクト、メインクラスの指定とコンパイル、実行

メニューバーから Run → Set Main Project から ModuleTest を選んでメインプロジェクトに設定します。

メインプロジェクトの設定

再び、左側のプロジェクトのペインで ModuleTest を選択、右クリックしてプロダウンメニューを表示、Properties を選択してプロジェクトのプロパティ画面を表示させます。左側の Categories から Run を選び、右側の Main Class のエントリに起動するメインクラス javaversion.JavaVersion を入力して OK ボタンをクリック、プロパティ画面を閉じます。

メインクラス javaversion.JavaVersion の設定

キーボード F6 を押して、プロジェクトをコンパイル、実行します。

Fedora 29 上での JavaFX 11 アプリケーション実行例

JavaVersion プロジェクトのソースコード

ご参考までに、今回使用した JaveVersion プロジェクトのソースコードとイメージを紹介しておきます。

リスト:JavaVersion.java 

リスト:JavaVersion.css 

image/java-logo.png

参考サイト

  1. JDK 11 Release Notes, Important Changes, and Information
  2. JavaFX 11がリリース - クロスプラットフォームのGUIライブラリ | ソフトアンテナブログ
  3. JDKの新しいリリース・モデル、および提供ライセンスについて
  4. openjdk-jfx/release-notes-11.md at jfx-11 · javafxports/openjdk-jfx
  5. netbeans - JavaFX deployment library not found in active JDK - Stack Overflow
  6. JavaFX - Gluon
  7. JavaFX (https://openjfx.io/)
  8. bitWalk's: Apache NetBeans 9.0

 

ブログランキング・にほんブログ村へ
にほんブログ村

2018-03-25

Apache NetBeans 9.0 beta

NetBeans 9.0 ベータ版が米国時間 3 月 22 日にリリースされたようです。

NetBeans は、もともと、学生プロジェクトとしてチェコのプラハで誕生した統合開発環境ですが、1999 年に Sun Microsystems 社が買収して翌年オープンソース化されました。その後は Sun Microsystems 社を買収した Oracle 社の所有となっていましたが、2016 年に Apache 財団へ寄贈されました。

現在は、同財団の正式プロジェクトを目指した "インキュベーション" の段階にあります。

Java の統合開発環境については Eclipse がポピュラーですが、JavaFX をプログラミングする際に NetBeans を使い始めて以来、Linux、Windows 両方でメインの開発環境になってしまいましたので、個人的には NetBeans のリリース動向に注目しています。

参考サイト

  1. Downloads / Apache NetBeans
  2. 「Apache NetBeans 9.0」がベータ公開 ~Oracleから寄贈後初の正式リリースを目指す - 窓の杜 [2018-2-19]

 

ブログランキング・にほんブログ村へ
にほんブログ村

2018-03-20

【備忘録】JavaFX Spinner の文字表示を右寄せする

JavaFX の Spinner クラスは、アプリケーションの設定値に使用するような数値の微調整をするウィジェット(UI 部品)として重宝しています。しかし、デフォルトでは数値は左寄せで表示されます。数値なので右寄せに表示したいのですが、いつもやり方を忘れてしまい、しばらく試行錯誤したりインターネット上を探し回ります。

直感的に覚えにくい仕様だ、というのは言い訳に過ぎず、きっと真剣に覚える気が無いせいでしょう。そんな自分の為に備忘録としてごくごく簡単なサンプルを示しておきました。

使用した環境は以下の通りです。

OS
Fedora 27 (x86_64)
Java
java-1.8.0-openjdk-1.8.0.161-5.b14.fc27.x86_64
JavaFX
openjfx-8.0.152-12.b04.fc27.x86_64
IDE
NetBeans IDE Dev (Build 201703170002)

 

下記は、デフォルトと右寄せ表示の Spinner ウィジェットを縦に並べて表示するサンプルです。

リスト:SpinnerTest.java 
package spinnertest;

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Spinner;
import javafx.scene.control.SpinnerValueFactory;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class SpinnerTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        VBox root = new VBox();
        Spinner<Integer> spinner1 = new Spinner<>();
        SpinnerValueFactory<Integer> valueFactory1 = new SpinnerValueFactory.IntegerSpinnerValueFactory(1, 10, 5);
        spinner1.setValueFactory(valueFactory1);
        root.getChildren().add(spinner1);

        Spinner<Integer> spinner2 = new Spinner<>();
        SpinnerValueFactory<Integer> valueFactory2 = new SpinnerValueFactory.IntegerSpinnerValueFactory(1, 10, 5);
        spinner2.setValueFactory(valueFactory2);
        spinner2.getEditor().setAlignment(Pos.CENTER_RIGHT);
        root.getChildren().add(spinner2);

        Scene scene = new Scene(root);

        primaryStage.setTitle("Spinner Test");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

}

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

SpinnerTest.java の実行例

参考サイト

  1. Spinner (JavaFX 8)

 

ブログランキング・にほんブログ村へ
にほんブログ村

2017-10-29

JavaFX: LineChart を使いこなそう (8) 日付軸

JavaFX のチャートを使いこなせるようになりたいと、ずいぶん前に LineChart のサンプルを示しました [1]。その時には、横軸にカテゴリの軸を使って整数値の年を文字列に変換して表示しましたが、今回は DateAxis クラスを使って、日付として軸を設定してみます。

使用した環境は以下の通りです。開発版の NetBeans IDE で JDK 9 を使用できることを確認したので、経験を積むためにも Java 9 を積極的に使っていきたいと考えています。

  • OS: Fedora 27 beta (x86_64)
  • Java: jdk-9.0.1-9.0.1-ga.x86_64 (Oracle)
  • IDE: NetBeans IDE Dev (Build 201710270002) [2]

LineChartSample8.java

DateAxis は JavaFX 標準で用意されているクラスではありません。何人かの方が Axis クラスを継承して DataAxis クラスを作成して公開されていますが、ここでは Christian Schudt 氏および Diego Cirujano 氏が著作者 (author) になっているソースを使用させていただきました [3]

プロジェクトは、前述した以前のサンプル [1] の構成と同じですが、プロジェクト内に上記 DateAxis.java を加えています[左図参照]。

それぞれのソースを紹介したいのですが、長くなってしまいますので、ここではメインの LineChartSample8.java だけ紹介します。すべてのソースは GitHub [4] にありますので、そこからクローンして下さい。

リスト:LineChartSample8.java 
package linechartsample8;

import java.util.Calendar;
import java.util.Date;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.chart.XYChart.Series;
import javafx.stage.Stage;

public class LineChartSample8 extends Application {

    @Override
    public void start(Stage stage) {
        stage.setTitle("Line Chart Sample (8)");
        //defining the axes
        DateAxis xAxis = new DateAxis();
        NumberAxis yAxis = new NumberAxis();

        xAxis.setLabel("X軸ラベル(年)");
        yAxis.setLabel("Y軸ラベル(数値)");

        //creating the chart
        LineChart<Date, Number> lineChart = new LineChart<>(xAxis, yAxis);
        lineChart.setData(getChartData());
        lineChart.setTitle("折れ線グラフのサンプル");

        Scene scene = new Scene(lineChart, 800, 400);
        String ClassName = getClass().getSimpleName();
        scene.getStylesheets().add(getClass().getResource(ClassName + ".css").toExternalForm());

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

    private ObservableList<XYChart.Series<Date, Number>> getChartData() {
        double y1 = 0.1;
        double y2 = -0.1;
        Series<Date, Number> series1 = new Series<>();
        Series<Date, Number> series2 = new Series<>();

        series1.setName("系列1");
        series2.setName("系列2");

        for (int i = 2011; i < 2021; i++) {
            series1.getData().add(new XYChart.Data<>(getYear(i), y1));
            y1 = y1 + Math.random() - .5;

            series2.getData().add(new XYChart.Data<>(getYear(i), y2));
            y2 = y2 + Math.random() - .5;
        }
        ObservableList<XYChart.Series<Date, Number>> seriesList = FXCollections.observableArrayList();
        seriesList.add(series1);
        seriesList.add(series2);

        return seriesList;
    }

    private Date getYear(int i) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(i, 0, 1, 0, 0);
        return calendar.getTime();
    }

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

}

コンパイルオプション

DateAxis.java のインポート宣言で、パッケージ com.sun.javafx.charts はモジュール javafx.controls で宣言されていますが、エクスポートされていませんというメッセージでエラーになっています。このエラーは、Java 8 では見られなかったものです。

これは Java 9 でモジュールシステムを導入したことにより、パッケージレベルでのカプセル化が可能になったため、JDK の内部 API を使用するとコンパイル エラーにすることが可能になったためのようです。このエラーの解決には代替機能を探すことが推奨されていますが、一時的にこの強力なカプセル化を壊す方法がコンパイラのオプションに --add-exports として追加されています [5][6]。今回は、これを利用します。

--add-exports javafx.controls/com.sun.javafx.charts=ALL-UNNAMED

NetBeans IDE で、このプロジェクトの「プロジェクト・プロパティ」ダイアログを表示させ、「コンパイル」画面の「追加コンパイラ・オプション(L):」のエントリに上記オプションを追加します。これでコンパイルが通るようになります。

コンパイラ・オプションの設定

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

LineChartSample8 の実行例

このサンプルでは、一見、前回の実行例と違いがないように見えますが、Date 型という「数値」で軸を作っていますので、ウィンドウのサイズを変えると目盛り間隔が調整されます。日付を軸に使いたいときは日付に対応した軸を使ったほうが当然便利なのです。日付(通常は、日や時間単位の間隔)を横軸にしてデータのトレンドをプロットするニーズが多いので重宝しています。

参考サイト

  1. bitWalk's: JavaFX: LineChart を使いこなそう (2)
  2. NetBeans IDE ダウンロード
  3. sco0ter / ExtFX / source / src / main / java / extfx / scene / chart / DateAxis.java — Bitbucket
  4. bitwalk123/LineChartSample8
  5. ヌーラボのアカウント基盤を Java 9 にマイグレーションして起きた問題と解決法 | ヌーラボ
  6. Java Platform, Standard Edition Oracle JDK 9 Migration Guide, Release 9

 

ブログランキング・にほんブログ村へ
にほんブログ村

2017-08-06

【備忘録】JavaFX GUI メッセージの国際化 --- NetBeans IDE

JavaFX で GUI アプリケーションを作るとき、表示する文字列は英語でなければならない案件ばかりだったため、GUI アプリケーションの国際化について考えてきませんでした。しかし最近になって、ついにというか、ようやくというか、少なくとも英語環境と日本語環境の両方に対応する必要がある案件が出てきましたので、やり方を調べました [1]

使用している環境は以下の通りです。

  • OS: Fedora 26 (x86_64)
  • Java: jdk1.8.0_141-1.8.0_141-fcs.x86_64 (Oracle)
  • IDE: NetBeans IDE 8.2

この環境のロケール [2] は下記のようになっています。

$ locale
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=
$

国際化の目標

ここでの目標は、ソースを再コンパイルすることなく、実行環境のロケールに応じたメッセージを表示することです。今回は英語をデフォルトとして日本語環境で日本語メッセージを表示することを目標とします。

Hello World!

サンプルとして、NetBeans IDE で空の JavaFX アプリケーションのプロジェクトを作成したときに生成される Hello World! のソースを国際化対応することにします。

メイン・メニューから「ファイル(F)」→「新規プロジェクト(W)...」を選んで、新規プロジェクトを作成するダイアログを開きます。

 

新規プロジェクトのダイアログの「プロジェクト(P)」の欄で JavaFXアプリケーション を選択し、下の「 次 > 」ボタンをクリックして次へ進みます。

 

プロジェクト名(N)」は HelloWorld としました。「終了(F)」ボタンをクリックしてダイアログを終了します。

 

実行すると(いつものように)以下のように表示されます。

 

Java のソースは以下のようになっています。コメント行は取り除きました。

リスト:HelloWorld.java 
package helloworld;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloWorld extends Application {
    
    @Override
    public void start(Stage primaryStage) {
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction((ActionEvent event) -> {
            System.out.println("Hello World!");
        });
        
        StackPane root = new StackPane();
        root.getChildren().add(btn);
        
        Scene scene = new Scene(root, 300, 250);
        
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

プロパティ・ファイルの追加

国際化に対応させる文字列は、プロパティ・ファイルに保存します。プロパティ・ファイルはキーと値がペアになった形式になっており、キーはプログラムがテキストを読み出すために使用する識別子、値は実際のテキストになります。各ロケールに対して、プロパティ・ファイルを作成しますが、キーは各ロケール共通で、文字列のみが異なります。まずはデフォルトのプロパティ・ファイルを作成します。

HelloWorld パッケージを選択、右クリックでプルダウンメニューを表示させ、「新規」→「その他...」を選択します。

 

「新規ファイル」のダイアログが表示されますので、「カテゴリ(C)」のリストから「その他」を選び、「ファイル・タイプ(F)」のリストで「プロパティ・ファイル」を選びます。下の「 次 > 」ボタンをクリックして次へ進みます。

 

「New プロパティ・ファイル」ダイアログで作成するプロパティ・ファイル名を設定します。ここではプロジェクト名と同じ HelloWorld とします。

 

ブランクの HelloWorld.propertier が生成されます。

 

国際化ウィザードの利用

国際化ウィザードは対象となるソースから文字列を抽出し、プロパティ・ファイルにキーとペアを書き出して、Java プログラムがプロパティ・ファイルと連携するよう、ソースの文字列の箇所に java.util.ResourceBundle.getBundle() を埋め込んでくれます。

国際化ウィザードを利用するには、メイン・メニューから、「ツール(T)」>「国際化(Z)」>「国際化ウィザード(I)」を選択します。

 

国際化ウィザートのダイアログの最初のステップ「1. 国際化するソースを選択する」では、国際化の対象となるソースを選択します。この例では HelloWorld.java のみです。下の「 次 > 」ボタンをクリックして次へ進みます。

 

次のステップ「2. ソースのリソースを選択」では、ソースとリソースであるプロパティファイルを対応させるのですが、この例では同じ名前の HelloWorld.propeties しかありませんので、そのまま下の「 次 > 」ボタンをクリックして次へ進みます。

 

「3. フィールドの生成」ステップでは、この場合、何も変更せず、下の「 次 > 」ボタンをクリックして次へ進みます。

 

最後の「4. 見つかった文字列の変更」ステップではウィザードは抽出した文字列からキーが先生されて表示されます。この例ではこのまま「終了(F)」ボタンをクリックしてウィザードを終了させます。

 

ウィザード終了後、HelloWorld.java の文字列の箇所は下記のように java.util.ResourceBundle.getBundle() で置換されています。

リスト:HelloWorld.java(国際化ウィザード終了後) 
package helloworld;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloWorld extends Application {
    
    @Override
    public void start(Stage primaryStage) {
        Button btn = new Button();
        btn.setText(java.util.ResourceBundle.getBundle("helloworld/HelloWorld").getString("SAY 'HELLO WORLD'"));
        btn.setOnAction((ActionEvent event) -> {
            System.out.println(java.util.ResourceBundle.getBundle("helloworld/HelloWorld").getString("HELLO WORLD!"));
        });
        
        StackPane root = new StackPane();
        root.getChildren().add(btn);
        
        Scene scene = new Scene(root, 300, 250);
        
        primaryStage.setTitle(java.util.ResourceBundle.getBundle("helloworld/HelloWorld").getString("HELLO WORLD!"));
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

空だった HelloWorld.properties には以下のようにキーと値のペアが書き込まれています。

リスト:HelloWorld.properties 
SAY\ 'HELLO\ WORLD'=Say 'Hello World'
HELLO\ WORLD!=Hello World!

日本語ロケールの追加

国際化に対応した HelloWorld.java と、デフォルトの HelloWorld.properties ファイルの準備ができたので、今度は日本語のメッセージを用意します。

デフォルトの HelloWorld.properties ファイルを選択して右クリックしてプルダウンメニューを表示させ、「追加(A)」→「ロケール...」を選択します。

 

「新規ロケール」のダイアログが表示されますので、「事前定義ロケール(P)」のリストから ja_JP を選択して「 OK 」ボタンをクリックしてダイアログを閉じます。

※「事前定義…」ってなんだ?と思いましたが、英語版のメッセージは Predefined ですので、要するに「定義済み…」という意味なのでしょう。

 

HelloWorld_ja_JP.properties が生成されます。生成後は HelloWorld.properties と同じ内容になっていますので、次のように編集しました。

リスト:編集後の HelloWorld_ja_JP.properties 
SAY\ 'HELLO\ WORLD'=「こんにちは、世界!」と出力
HELLO\ WORLD!=こんにちは、世界!

あらためてプロジェクトをビルド・実行すると。以下の通り、ばっちりメッセージが日本語に変わりました(下左図)。

念の為 HelloWorld.jar を Windows 10(日本語版, 32bit)へコピー・実行して確認してみたところ、同様に日本語メッセージが表示されました(下右図)。

 

参考サイト

  1. GUIフォームの国際化 - NetBeans IDEチュートリアル
  2. ロケールとは - 国際化対応言語環境の利用ガイド

 

国際化に関しては、こんなに古い本しか出回っていません。😢

ブログランキング・にほんブログ村へ
にほんブログ村