Swingというのは、いわずと知れたJavaにくっついてきてるWindowsアプリ作るためのやつです。
常々口には出さなかったけど、こいつは、結構いけてるんじゃないかと思ってました。
いや、本当に。
最近はXAMLにLoveだけど、Swing Application Frameworkというものがあるというみたいなので、ちょいと触ってみた。
とりあえずは、プロジェクトを作ってどんなものが出来るのか見てみる。
因みに、Swing Application Frameworkを使った開発もNetBeansでいける。すばらしい。
新規作成からJavaデスクトップアプリケーションを選択する。
次のページでは、基本アプリケーションを選択してOK
これだけのウィザードで結構な数のファイルが作られる。
上の画像より下は、アイコンがいっぱいならんでいる。
Javaのコードとしては、
- HelloAboutBox
- HelloApplication
- HelloView
の3つになる。
HelloAboutBoxは、アプリケーションの情報を表示するための画面になる。
解説するまでもないだろう。
HelloApplicationというクラスは、org.jdesktop.application.SingleFrameApplicationというクラスを継承する形で作られている。
こいつは、単一の画面を持つアプリケーションのためのクラスみたいだ。
アプリケーション全体のライフサイクルの管理とかを担ってるっぽい。
ちょっとコードをのぞいてみると、startupとかそれっぽい感じのメソッドがある。実際にはstartup以外にもshutdownとかいうメソッドもあったりして、適時オーバーライドして処理をしてくださいということみたいだ。
HelloViewは、メインのウィンドウになる。
普通?の感覚だとJFrameを継承して作られたものかな~と思うけど、実はJFrmeじゃなくてFrameViewというクラスだったりする。
HelloApplicationのstartupメソッドを見ると下のような感じで画面を表示するようなコードが書かれてる。
@Override protected void startup() {
show(new HelloView(this));
}
これがSwing Application Frameworkのお作法なのかな?
因みにFrameViewはViewクラスを継承しててViewクラスはAbstractBeanを継承する形で作られている。
それぞれのメンバを眺めてみると大体下のような感じの役割分担になってそう。(あくまで想像)
- AbstractBean
JavaBeansとして必要な基本的なものを提供。
プロパティの変更の通知が主っぽい。
- View
アプリケーションの1画面に相当するものが備えておくべき機能を提供。
ツールバーやメニューバーやステータスバーに、リソース管理やActionMapとかもここらへんで管理してそう
- FrameView
JFrameを使った画面に必要な機能を提供。
そして、ApplicationのshowメソッドはViewを受け取ることでうまいことやってくれるという寸法のようだ。
因みに、showメソッドを見てみるとJComponentやJFrameやJDialogを受け取る形のものもあったりする。
なので、昔ながらの作り方で作ったものでも面倒は見てくれるみたいだ。ただ、ViewやFrameViewで提供している便利機能は使えないけど覚悟しとけよってことかな?
最後に、mainメソッドを覗いてみた。
public static void main(String[] args) {
launch(HelloApplication.class, args);
}
ぜんぜんたいしたことはやってない。
普通のSwingのアプリケーションならEventQueue.invokeLater(new Runn....みたいなくだりを書いてるものに比べると非常にシンプル。
アプリケーション起動するよ!ということが明確に書かれてるので好印象。
ということで、実行!!
FileメニューとHelpメニューをもった単純なフレームが立ち上がる。
HelpのAboutを押すと、下のような画面も出てくる。
必要最低限のみ出来上がってる感じ。
ということで今回のまとめ。
- NetBeansだと簡単にSwing Application Frameworkが試せるみたい
(本格的に使うとどうなるかは未知数)
- Applicationクラスが、アプリケーションのライフサイクルとか管理してくれるみたい
- JFrameを直接継承するんじゃなくてFrameViewを使うと色々便利な機能がありそう
でした。