普段Javaのコードを書いてて思う。
マジックナンバーより定数。文字列なら定数よりもプロパティファイルから読み込む。
そんなのが素敵なアプリケーションの作り方だとわかっているけど、実態はめんどくさいのでハードコーディングしてしまいがちだったりする。特に、予定外のことをやるときとかにこの傾向が自分は強い。そういう傾向の人って結構いるような気がするんだけどどうだろう??
それは置いといて、Swing Application Frameworkを使ったアプリケーションを普通に開発してると、自動的にGUIに絡む部分の文字列はプロパティファイルに格納される。
すばらしい。
ということでちょびっと見てみる。
まず、ResourceStudyという名前でデスクトップアプリケーションを作る。そして、出来上がったウィンドウにラベルとボタンを置く。ボタンのアクションの設定からsayHelloというメソッドをイベントとして新規に登録する。テキストに「こんにちは」ツールチップに「こんにちはを表示する」を設定して了解をクリックする。
sayHelloメソッドには、ラベルにこんにちはを表示するコードを書いておく。
@Action
public void sayHello() {
jLabel1.setText("こんにちは");
}
これで、実行してボタンを押すとラベルに「こんにちは」と表示されるアプリケーションが出来上がる。
ということで、プロパティファイルがどんな感じになってるか見てみる。
プロパティファイルは、対応するクラスの入っているパッケージのresourcesパッケージにクラス名と同じ名前で作られることになってる。
なので、この場合は、resourcestudy.ResourceStudyViewクラスに置いたラベルやボタンの情報を見たいので、resourcestudy.resources.ResourceStudyView.propertiesを見るのがいい。開いてみると、色々な文字列が書かれてるけど、最後のほうに下のような記述がある。
jLabel1.text=jLabel1
jButton1.text=jButton1
sayHello.Action.shortDescription=こんにちはを表示する
sayHello.Action.text=こんにちは
デザイナで設定した文字列等は、ここに自動的に出力されるようになっているのがわかる。
ありがたいことだ。
ただ、やっぱりというか当然のことだけど自分でプログラム中に文字列を埋め込むのはプロパティファイルに自動で記述されない。というか、勝手にされるとうざいことこの上ないだろう。
これは、残念なことに自分で手動でもってプロパティファイルに移動させないといけない。Eclipseだと、ここらへんも利ファクタリングでなんとかしてくれたような気がするが、ざっと見た感じNetBeansにそんな機能はなさそうだ。
ということで、プロパティファイルに一行追加する。
sayHello.output.message=こんにちは
そしてsayHelloメソッドを下のように書き換える。
@Action
public void sayHello() {
jLabel1.setText(getResourceMap().getString("sayHello.output.message"));
}
とまぁ、手動でやらなければならないところもあるけど、デザイナ上で指定した文字列とかはプロパティファイルに落とされるようになってるので、大分手間は軽減されるように思う。
以上!
投稿日時 : 2008年6月22日 23:39