Archive for 6 月 30th, 2008

JSR296 on NetBeans その12

月曜日, 6 月 30th, 2008

今日は JSR296 のリソースファイルを利用した仕組みについて調べてみます。

DesktopApplication1AboutBox クラスを参考にします。

initComponents() メソッドの処理の中に見慣れないコードがあったのを覚えているでしょうか?

まず、JDialog のタイトルを見ましょう。

org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(desktopapplication1.DesktopApplication1.class).getContext().getResourceMap(DesktopApplication1AboutBox.class);
setTitle(resourceMap.getString(“title”)); // NOI18N
setModal(true);
setName(“aboutBox”); // NOI18N

この見慣れないコードによってリソースファイルの情報を取得してアプリケーションにセットしてます。

最初の3行で org.jdesktop.application.ResourceMap resourceMap にリソースファイルの情報を取り込んでます。

desktopapplication1.DesktopApplication1.class のインスタンス、コンテキストを取得し、

getResourceMap() メソッドの引数で指定されている DesktopApplication1AboutBox.class のリソースファイル

つまり、DesktopApplication1AboutBox.properties ファイルが使用されるということですね。

4行目の

setTitle(resourceMap.getString(“title“)); // NOI18N

によって DesktopApplication1AboutBox.properties の

title = About: ${Application.title} ${Application.version}

でタイトルが設定されるようです。

${Application.title} ${Application.version} この二つはDesktopApplication1.properties の4行目と5行目にある

Application.title = +++ ** Basic Application Example ** +++

Application.version = 1.012345

です。

なんでこんなになっているんでしょうか?

リソースファイルを全てクラスごとに分けてもいいんでしょうが、アプリケーション全体で共有できるものはしたほうがいい。

たぶん、きっとそういう考えからだと思う。

その他のラベルも同じ仕組みになってます。

ソースを見れば一目瞭然です。

この DesktopApplication1AboutBox クラスは NetBeans によって自動生成されたものでしたね。

ちょっとラベルのプロパティを覗いてみましょう。

appTitleLabel を見てみます。

33 

Swing Application Framework のリソースインジェクションを使用するために、

リソースとして定義のチェックボックスにチェックを入れてありますね。

ローカライズ機能を使用するために、ローカライズ版にもチェックが入ってます。

ここで注目なのがスコープの設定がアプリケーションになっているということです。

キーに先ほど出てきた DesktopApplication1.properties ファイルの Application.title が設定されてます。

値はそれに設定した +++ ** Basic Application Example ** +++ が入ってます。

34 

これは自動生成されたものですが、自分で作ったラベルにももちろん設定できます。

こういった設定が GUI 操作でできるのはうれしいです(^^)

さすが NetBeans と褒めておこう!

ちなみに?マークのヘルプがあるので表示させてみる。

35 

ここではリソースファイルと言わずにプロパティファイルと言ってますね。

そのプロパティファイルの値をアプリケーションリソースと呼んでます。

そう言われてみればそうなんですが、ここで言うプロパティファイルは一般的にはリソースファイルでも通じますよね?

なんだか細かなことだが気になります。

とりあえず今日は、イベントを発生させることができないラベルについて調べてみました。

面白い仕組みになってます(^^)