こうしろうは,Eclipse + Visual Editorを開発環境として,GUI にSwingを使うJavaアプリケーションを解説本片手に作成中である。写真部の所有するカメラをMySQLデータベースに登録,検索するアプリを作るという想定だ。
「こうしろう,できたところまで一度頂戴」とUSBメモリを差し出す。こうしろうのB5モバイルからコピーしたプロジェクトを父は自分のPCに落とす。
Eclipseのファイルメニューからインポートを選び,「既存プロジェクトをワークスペースへ」を選択する。
インポート直後にプロジェクトを開いたところ
ここで,最近Visual Basic 2005でプログラムを書いていた父は戸惑ったのだ。「フォームのデザインが表示されない」と。Visual BasicなどでWindowsアプリケーションを開発するときは,まずフォームのデザインありきで,コードもフォームのデザインから開くことができる。なぜ,Visual Editorで作成したフレームやコンボボックス,ボタンが表示されないのだ。インポートの仕方が悪いのか?何かコピーし忘れたのか?と悩んだ。
「Visual Editorは後付けのプラグインだ」と気づくまでにかなりの時間を要した。プラグインを後から追加したのではなく,Eclipse本体にビジュアルにフォームを作成する機能が付いているような錯覚をしていた。Visual Editorはペチャペチャと部品を貼り付けるとコードを出力してくれるが,Eclipseではコードを編集していくことが標準なのだ。こうしろうのB5ノートではVisual Editorで作業をしていたから,グラフィカルな表示がされているだけのことなのだ。
クラス(Javaソース・ファイル)を右クリックして表示されたメニューから,アプリケーションから開く-Visual Editorを選ぶとビジュアルに表示された。
カメラのタイプがデジカメ,フィルム,インスタント,その他とラジオボタンになっている。Visual Basicなどを使ってきた者の常識としては,ラジオボタンは排他的選択ボタンのはずである。グループ内のボタンのうち,オンになるのは一つのボタンだけであり,あるボタンをオンにしたら他のボタンはオフになるはずである。それが丸いラジオボタンの動きであり,それに対し四角いチェックボックスは複数チェックを付けることができる。だから,おのずと使い分けが決まってくる。
しかし,Swingの場合はラジオボタンとチェックボックスの住み分けがはっきりしない。排他的選択ボタンにするには以下のようなコードでButtonGroupクラスのインスタンスを作成し,group.addでグループとしてまとめてやる必要がある。
---------------------------------------------------------- group = new ButtonGroup(); group.add(jRadioButton); group.add(jRadioButton1); group.add(jRadioButton2); group.add(jRadioButton3); ----------------------------------------------------------同じパネル上に配置したからといって排他的選択ボタンにはならないのである。
上記のようにグループ化するコードを書かなかったら,チェックボックスのようにいくつも選択することができるのである。Java Swingでは明示的にグループ化してやらないといけないのだ。それに対し,たとえばVisual C# 2005ではどうかというと,
フォームに配置したラジオボタンはフォーム上の他のラジオボタンと排他的になり,パネルに配置したラジオボタンはパネル上の他のラジオボタンと排他的選択ボタンになる。
訂正(2007/4/16):上記の文章で,「パッケージを右クリックして表示されたメニューから,アプリケーションから開く-Visual Editorを選ぶとビジュアルに表示された」とあったのは,「クラス(Javaソース・ファイル)を右クリックして表示されたメニューから,アプリケーションから開く-Visual Editorを選ぶとビジュアルに表示された」の誤りでした。本文は訂正済みです。