NetBeans IDEでのSwing GUIのデザイン

このページの内容は、NetBeans IDE 6.9、7.0、7.1、7.2、7.3および7.4に適用されます

このチュートリアルでは、NetBeans IDEのGUIビルダーを使用して、ContactEditorというアプリケーションのグラフィカル・ユーザー・インタフェース(GUI)を作成する手順を示します。このとき、社員のデータベースに含まれる個人の連絡先情報を表示、編集できるGUIフロント・エンドのレイアウトを決定します。

このチュートリアルでは、GUIビルダーのインタフェースの使用、GUIコンテナの作成、コンポーネントの追加、サイズ変更、および位置揃え、コンポーネントのアンカー設定の調整、コンポーネント自動サイズ変更の動作の設定、コンポーネント・プロパティの編集を行う方法について学習します。

このチュートリアルを完了するのに要する時間は約30分です。

内容

このチュートリアルを完了するには、次のソフトウェアとリソースが必要です。

ソフトウェアまたはリソース 必須バージョン
NetBeans IDE バージョン6.9、7.0、7.1、7.2、7.3または7.4
Java Development Kit (JDK) バージョン6または7

開始

IDEのGUIビルダーを使用すると、レイアウト・マネージャを熟知していなくても高度なGUIをビルドできます。コンポーネントを任意の場所に置くのみでフォームのレイアウトを決定できます。

GUIビルダーの視覚的なフィード・バックの詳細は、GUIビルダーの視覚的なフィード・バックの説明を参照してください。

プロジェクトの作成

IDEでは、プロジェクト内でJava開発をすべて行うので、ソースやその他のプロジェクト・ファイルを保存するContactEditorプロジェクトを新規に作成する必要があります。IDEプロジェクトは、Javaソース・ファイルとそれに関連するメタデータのグループで、プロジェクト固有のプロパティ・ファイル、そのビルドと実行を制御するAntビルド・スクリプト、AntターゲットをIDEコマンドにマッピングするproject.xmlファイルが含まれます。Javaアプリケーションは複数のIDEプロジェクトで構成されることがよくありますが、このチュートリアルでは、完全に1つのプロジェクトに収まる単純なアプリケーションを作成します。

新しいContactEditorアプリケーションのプロジェクトを作成するには:

  1. 「ファイル」>「新規プロジェクト」を選択します。または、IDEツールバーにある「新規プロジェクト」アイコンをクリックして選択することもできます。
  2. 「カテゴリ」ペインで「Java」ノードを選択し、「プロジェクト」ペインで「Javaアプリケーション」を選択します。「次」をクリックします。
  3. 「プロジェクト名」フィールドに「ContactEditor」と入力し、プロジェクトの場所を指定します。
  4. 「ライブラリの格納用に専用フォルダを使用」チェックボックスは選択されていない状態のままにします。
  5. 「メイン・プロジェクトとして設定」チェックボックスが選択されていることを確認し、また「メイン・クラスの作成」フィールドをクリアします。
  6. 「終了」をクリックします。

    システム上の指定した場所にContactEditorフォルダが作成されます。このフォルダには、プロジェクトのAntスクリプト、ソースとテストを保持するフォルダ、プロジェクト専用のメタデータ用のフォルダなど、プロジェクトに関連するすべてのファイルとフォルダが含まれます。プロジェクト構造を表示するには、IDEの「ファイル」ウィンドウを使用します。

JFrameコンテナの作成

新しいアプリケーションを作成すると、「プロジェクト」ウィンドウの「ソース・パッケージ」フォルダに空の「<デフォルト・パッケージ>」ノードが追加されます。インタフェースのビルドに進むには、他の必要なGUIコンポーネントを入れるJavaコンテナを作成する必要があります。この手順では、JFrameコンポーネントを使用してコンテナを作成し、新しいパッケージにそのコンテナを配置します。

JFrameコンテナを追加するには:

  1. 「プロジェクト」ウィンドウで「ContactEditor」ノードを右クリックし、「新規」>「JFrameフォーム」を選択します。
    または、「新規」>「その他」>「Swing GUIフォーム」>「JFrameフォーム」を選択してJFrameフォームを検索します。
  2. クラス名として「ContactEditorUI」と入力します。
  3. パッケージとして「my.contacteditor」と入力します。
  4. 「終了」をクリックします。

    IDEによって、ContactEditorUI.javaアプリケーション内にContactEditorUIフォームとContactEditorUIクラスが作成され、ContactEditorUIフォームがGUIビルダー内で開きます。デフォルトのパッケージがmy.contacteditorパッケージに置き換わります。

先頭

GUIビルダーの操作

アプリケーション用の新しいプロジェクトを作成できたので、GUIビルダーのインタフェースの操作を練習してみます。

注意: 対話型デモを使用してGUIビルダーのインタフェースを調べるには、GUIビルダーの調査(.swf)スクリーンキャストを表示してください。

IDEのGUIビルダーのインタフェース

前の図に示すように、JFrameコンテナを追加すると、IDEによって、新しく作成されたContactEditorUIフォームが、いくつかのボタンが含まれたツールバーとともにエディタのタブに開かれます。ContactEditorフォームはGUIビルダーのデザイン・ビューで開き、ビルドするGUIフォームを移動、編成、および編集できる3つのウィンドウがIDEの両端に自動的に表示されます。

GUIビルダーには、次のウィンドウがあります。

  • デザイン領域。JavaのGUIフォームを作成および編集するGUIビルダーのプライマリ・ウィンドウ。ツールバーの「ソース」ボタンではクラスのソース・コードを表示することができ、「デザイン」ボタンではGUIコンポーネントのグラフィカル・ビューを表示することができ、「履歴」ボタンではファイルの変更のローカル履歴にアクセスできます。ツールバーのその他のボタンを使用すると、選択モードと接続モードの切替え、コンポーネントの位置揃え、コンポーネントの自動サイズ変更の動作の設定、フォームのプレビューなどの一般的な操作を実行できます。
  • ナビゲータ。アプリケーション内の可視および不可視のすべてのコンポーネントをツリー階層形式で表示します。また、「ナビゲータ」は、提供されるパネルでコンポーネントを整理できるのみでなく、現在GUIビルダーで編集中のツリー・コンポーネントに関する視覚的なフィード・バックも提供します。
  • パレット。使用可能なコンポーネントのカスタマイズ可能な一覧で、レイアウト・マネージャに加えて、JFC/Swing、AWT、およびJavaBeansコンポーネントのタブがあります。また、パレットに表示されるカテゴリは、カスタマイザを使用して作成、除去、および再配置できます。
  • プロパティ・ウィンドウ。GUIビルダー、「ナビゲータ」ウィンドウ、「プロジェクト」ウィンドウ、または「ファイル」ウィンドウで現在選択されているコンポーネントのプロパティを表示します。

「ソース」ボタンをクリックすると、IDEによってアプリケーションのJavaソース・コードがエディタに表示され、保護されたブロックと呼ばれるグレーの領域(選択されると青色になります)で示されたGUIビルダーによって自動的に生成されたコードのセクションも表示されます。保護されたブロックは、ソース・ビューで編集できない部分です。ソース・ビューでコードを編集できるのはエディタの白い部分のみです。保護されたブロック内のコードを変更する必要がある場合は、「デザイン」ボタンをクリックしてGUIビルダーに戻り、フォームを調整します。変更内容を保存すると、ファイルのソースが更新されます。

注意: 上級開発者は、パレット・マネージャを使用してカスタム・コンポーネントをJAR、ライブラリ、または他のプロジェクトからパレットに追加できます。パレット・マネージャを使用してカスタム・コンポーネントを追加するには、「ツール」>「パレット」>「Swing/AWTコンポーネント」を選択します。

先頭

主な概念

IDEのGUIビルダーによって、グラフィカル・インタフェースの作成作業の流れが合理化され、開発者は複雑なSwingレイアウト・マネージャを使用する必要がないので、JavaのGUI作成の主な問題点が解決します。現在のNetBeans IDEのGUIビルダーは、理解しやすく簡単に利用できる単純レイアウト・ルールによって、「フリー・デザイン」方式をサポートするように拡張されました。GUIビルダーでフォームのレイアウトを調整するときは、コンポーネントの最適な間隔や位置揃えを示す視覚的なガイドラインが表示されます。バックグラウンドでは、GUIビルダーによってデザインが機能するUIに変換され、このUIは、新しいGroupLayoutレイアウト・マネージャやその他のSwingの構造を使用して実装されます。動的なレイアウト・モデルが使用されているため、GUIビルダーを使用してビルドしたGUIは、実行時に期待どおりに動作し、変更を加えた場合は、コンポーネント間で定義された関係を変更せずに調整されます。フォームのサイズを変更するか、ロケールを変更するか、異なるルック・アンド・フィールを指定すると、ターゲットのルック・アンド・フィールのインセットとオフセットにあわせてGUIが自動的に調整されます。

フリー・デザイン

IDEのGUIビルダーでは、絶対位置決め方式を使用しているかのようにコンポーネントを任意の位置に置くことでフォームをビルドできます。GUIビルダーによって必要なレイアウト属性が判別され、自動的にコードが生成されます。インセット、アンカー、塗りつぶしなどを意識する必要はありません。

コンポーネントの自動配置(スナップ)

GUIビルダーでフォームにコンポーネントを追加すると、オペレーティング・システムのルック・アンド・フィールに基づいて、コンポーネントの位置決めを助ける視覚的なフィード・バックが表示されます。GUIビルダーでは、フォーム上でのコンポーネントの配置に関して役立つインラインのヒントやその他の視覚的なフィード・バックが表示され、またコンポーネントはガイドラインに自動的に配置(スナップ)されます。これらの提案は、フォームにすでに配置されているコンポーネントの位置に基づいて表示されますが、実行時に別のターゲットのルック・アンド・フィールが正しくレンダリングされるように、パディングは柔軟になっています。

視覚的なフィード・バック

また、GUIビルダーは、コンポーネント間のアンカー関係と相互の繋がりを視覚的に表現します。これらのフィード・バックによって、実行時のGUIの表示と動作に影響する様々な配置の関係やコンポーネントの固定の動作を簡単に把握できます。その結果、GUIのデザイン・プロセスに要する期間を短縮でき、正常に機能する高度なビジュアル・インタフェースを短時間で作成できます。

先頭

作業の開始

GUIビルダーのインタフェースについて理解できたので、ContactEditorアプリケーションのUIの開発を始めます。この項では、IDEのパレットを使用して必要なGUIコンポーネントをフォームに追加します。

IDEではフリー・デザイン方式が採用されているので、レイアウト・マネージャを使用してコンテナ内のコンポーネントのサイズや位置を制御する必要がありません。この後の各図に示すように、必要なコンポーネントをGUIフォームにドラッグ・アンド・ドロップするのみです。

注意: 下の項に関する対話型デモについては、個々のコンポーネントおよび複数のコンポーネントの追加(.swf)スクリーンキャストを参照してください。

コンポーネントの追加: 基本

IDEのGUIビルダーによって、JavaのGUIを作成するプロセスが簡素化されますが、配置を始める前にインタフェースのレイアウトをスケッチすると役立ちます。多くのインタフェース・デザイナは、この方法を推奨しています。このチュートリアルでは、GUIのプレビューの項で完成したフォームを確認できます。

フォームの最上位のコンテナとしてJFrameをすでに追加したので、次のステップではJPanelをいくつか追加し、JPanelのタイトル付き境界線を使用してUIのコンポーネントをまとめることができます。この後の各図を参照するとともに、これを行うときのIDEの「ドラッグ・アンド・ドロップ」動作に注目してください。

JPanelを追加するには:

  1. 「パレット」ウィンドウで、マウス・ボタンをクリックして離すことによって、「Swingコンテナ」カテゴリから「パネル」コンポーネントを選択します。
  2. カーソルをGUIビルダー内のフォームの左上隅に移動します。コンポーネントをコンテナの左上隅に近づけると、適切なマージンを示す横方向と縦方向のガイドラインが表示されます。フォーム内をクリックしてこの位置にJPanelを配置します。

    JPanelコンポーネントが、選択されたことを示すオレンジ色の強調表示でContactEditorUIフォームに表示されます。マウス・ボタンを離すと、次の図に示すように、コンポーネントのアンカーの関係を示す小さなインジケータが表示され、対応する「JPanel」ノードが「ナビゲータ」ウィンドウに表示されます。

選択されたJPanel

次に、この後で別のコンポーネントを配置する領域を設定するためにJPanelのサイズを変更しますが、その前にGUIビルダーの別の表示機能について説明します。そのためには、追加したJPanelの選択を解除する必要があります。タイトル付き境界線をまだ追加していないので、パネルは表示されなくなります。ただし、JPanelの上にカーソルを置くと、パネルの位置がわかるように輪郭がグレーに変わります。コンポーネント内の任意の場所をクリックするとコンポーネントが再度選択され、サイズ変更のハンドルや、アンカーのインジケータが再度表示されます。

JPanelのサイズを変更するには:

  1. 追加したJPanelを選択します。コンポーネントの周囲にサイズ変更のハンドル(小さい四角形)が表示されます。
  2. JPanelの右端のサイズ変更のハンドルをクリックし、マウス・ボタンを押したまま、フォームの端の近くに点線のガイドラインが表示されるまでドラッグします。
  3. マウス・ボタンを離してコンポーネントのサイズを変更します。

    次の図に示すように、適切なオフセットに従って、JPanelコンポーネントがコンテナの左右のマージンまで広がります。

サイズ変更されたJPanel

UIの名前情報を格納するパネルを追加できたので、このプロセスを繰り返して、このパネルの下に電子メール情報用の別のパネルを追加する必要があります。この後の各図を参考にし、GUIビルダーの提案された配置に注意して、前の2つの作業を繰り返します。2つのJPanel間でガイドラインが示す間隔は、左右の端のマージンよりも狭くなっています。2つ目のJPanelを追加したら、フォームの縦方向の残りのスペースが埋まるようにサイズを変更します。

追加された別のJPanel

選択された別のJPanel

サイズ変更された別のJPanel

GUIの上下2つのセクションの機能を視覚的に区別するために、各JPanelに境界線とタイトルを追加します。まず、「プロパティ」ウィンドウでこの作業を実行し、次にポップアップ・メニューを使用して実行します。

JPanelにタイトル付き境界線を追加するには:

  1. GUIビルダーで上のJPanelを選択します。
  2. 「プロパティ」ウィンドウで、「border」プロパティの横にある省略符号ボタン(...)をクリックします。
  3. 表示されるJPanelの境界線エディタで、「使用可能な境界線」ペインで「TitledBorder」ノードを選択します。
  4. 下の「プロパティ」ペインで、「タイトル」プロパティに「Name」と入力します。
  5. 「フォント」プロパティの横にある省略符号(...)をクリックし、「フォント・スタイル」に「太字」を選択し、「サイズ」に「12」と入力します。「OK」をクリックしてダイアログを閉じます。
  6. 下のJPanelを選択してステップ2から5を繰り返しますが、今回はJPanelを右クリックし、ポップアップ・メニューを使用して「プロパティ」ウィンドウを開きます。「タイトル」プロパティに「E-mail」と入力します。

    両方のJPanelコンポーネントにタイトル付き境界線が追加されます。

追加されたタイトル付き境界線

フォームへの個々のコンポーネントの追加

連絡先リストで実際の連絡先情報を表示するコンポーネントを追加します。この作業では、連絡先情報を表示するJTextFieldと、これらのフィールドの説明を表示するJLabelをそれぞれ4つ追加します。このとき、オペレーティング・システムのルック・アンド・フィールの定義に従って、適切なコンポーネントの間隔を示す横方向と縦方向のガイドラインがGUIビルダーで表示されます。このガイドラインに従うと、ターゲットのオペレーティング・システムのルック・アンド・フィールにあわせてGUIが実行時に自動的にレンダリングされます。

フォームにJLabelを追加するには:

  1. 「パレット」ウィンドウで、「Swingコントロール」カテゴリから「ラベル」コンポーネントを選択します。
  2. 先に追加したName JPanelの上にカーソルを置きます。JLabelが、上端と左端にマージンを残してJPanelの左上隅にあることを示すガイドラインが表示されたら、クリックしてラベルを配置します。

    JLabelがフォームに追加され、コンポーネントを表すノードが「インスペクタ」ウィンドウに追加されます。

ここで、追加したJLabelの表示テキストを編集します。コンポーネントの表示テキストはいつでも編集できますが、コンポーネントの追加時に編集するのが最も簡単な方法です。

JLabelの表示テキストを編集するには:

  1. JLabelをダブルクリックして表示テキストを選択します。
  2. First Name:」と入力して、[Enter]を押します。

    JLabelの新しい名前が表示され、コンポーネントの幅がテキストの長さにあわせて調整されます。

ここで、JTextFieldを追加して、GUIビルダーのベースライン位置揃え機能を確認します。

フォームにJTextFieldを追加するには:

  1. 「パレット」ウィンドウで、「Swingコントロール」カテゴリから「テキスト・フィールド」コンポーネントを選択します。
  2. First Name: JLabelの右側にカーソルを移動します。JTextFieldのベースラインがJLabelのベースラインとそろっていることを示す横方向のガイドラインが表示され、2つのコンポーネントの適切な間隔を示す縦方向のガイドラインが表示されたら、クリックしてJTextFieldを配置します。

    次の図に示すように、JTextFieldは、フォーム内でベースラインがJLabelのベースラインとそろっている位置にスナップします。テキスト・フィールドのほうが高さがあるので、そのベースラインにあわせてJLabelが少し下に移動します。通常どおり、そのコンポーネントを表すノードが「ナビゲータ」ウィンドウに追加されます。

追加されたJTextField

ここで、次の図に示すように、追加したJLabelとJTextFieldの右側にさらにJLabelとJTextFieldを追加します。今回はJLabelの表示テキストとして「Last Name:」と入力し、JTextFieldのプレースホルダのテキストはそのままにします。

追加された別のJTextField

JTextFieldのサイズを変更するには:

  1. Last Name: JLabelの右側に追加したJTextFieldを選択します。
  2. JTextFieldの右端のサイズ変更のハンドルをJPanelの右端の方向にドラッグします。
  3. テキスト・フィールドとJPanelの右端の間の適切なマージンを示す縦方向のガイドラインが表示されたら、マウス・ボタンを離してJTextFieldのサイズを変更します。

    次の図に示すように、JTextFieldの右端が、ガイドラインが示すJPanelの端のマージンにあわせてスナップします。

サイズ変更されたJTextField

フォームへの複数のコンポーネントの追加

これから追加する2つのJTextFieldの説明を示すTitle:Nickname:の2つのJLabelを追加します。[Shift]キーを押しながらコンポーネントをドラッグ・アンド・ドロップして、すばやくフォームに追加します。このとき、GUIビルダーで、コンポーネント間の適切な間隔を示す横方向と縦方向のガイドラインが表示されます。

フォームに複数のJLabelを追加するには:

  1. 「パレット」ウィンドウで、マウス・ボタンをクリックして離すことによって、「Swingコントロール」カテゴリから「ラベル」コンポーネントを選択します。
  2. First Name: JLabelの下にカーソルを移動します。新しいJLabelの左端が上のJLabelの左端とそろっていて、これらのJLabel間に小さなマージンがあることを示すガイドラインが表示されたら、[Shift]を押しながらクリックして最初のJLabelを配置します。
  3. [Shift]キーを押したまま、別のJLabelをすぐに最初のJLabelの右側に配置します。[Shift]キーは、2つ目のJLabelを配置する前に離します。2つ目のJLabelを配置する前に[Shift]キーを離さなかった場合は、[Esc]キーを押します。

    次の図に示すように、2行目が作成され、JLabelがフォームに追加されます。各コンポーネントを表すノードが「ナビゲータ」ウィンドウに追加されます。

2行目のJLabel

ここで、この後で設定する位置揃えの結果を確認できるように、JLabelの名前を編集します。

JLabelの表示テキストを編集するには:

  1. 最初のJLabelをダブルクリックして表示テキストを選択します。
  2. Title:」と入力して、[Enter]を押します。
  3. ステップ1と2を繰り返し、2つ目のJLabelの名前プロパティとして「Nickname:」と入力します。

    次の図に示すように、JLabelの新しい名前がフォームに表示され、編集後の長さにあわせてJLabelの位置が調整されます。

2行目のJLabelの新しい名前

コンポーネントの挿入

注意: 下の項に関する対話型デモについては、コンポーネントの挿入(.swf)スクリーンキャストを参照してください。

フォーム内にすでに配置されているコンポーネントの間にコンポーネントを追加する必要がある場合があります。2つの既存のコンポーネントの間にコンポーネントを追加すると、GUIビルダーではその新しいコンポーネント用の領域を確保するために、既存のコンポーネントが自動的に移動します。この処理を確認するため、この後の2つの図に示すように、追加したJLabelの間にJTextFieldを挿入します。

2つのJLabelの間にJTextFieldを挿入するには:

  1. 「パレット」ウィンドウで、「Swingコントロール」カテゴリから「テキスト・フィールド」コンポーネントを選択します。
  2. JTextFieldが2行目のTitle:Nickname:の各JLabelと重なり、ベースラインがそろうようにカーソルを移動します。新しいテキスト・フィールドの位置決めをできない場合は、次の最初のイメージに示すようにNickname JLabelの左側のガイドラインにスナップしてもかまいません。
  3. クリックしてJTextFieldをTitle:Nickname:の各JLabelの間に配置します。

    JTextFieldが2つのJLabelの間にスナップします。ガイドラインが示す横方向のオフセットに従って、右側にあるJLabelがJTextFieldの右に移動します。

Nickname: JLabelと重なったJTextField

Tiltle: JLabelとNickname: JLabelの間に配置されたJTextField

ここで、各連絡先の通称を表示するJTextFieldをフォームの右側に追加します。

JTextFieldを追加するには:

  1. 「パレット」ウィンドウで、「Swing」カテゴリから「テキスト・フィールド」コンポーネントを選択します。
  2. カーソルをNicknameラベルの右側に移動し、クリックしてテキスト・フィールドを配置します。

    JTextFieldがJLabelの右側にスナップします。

JTextFieldのサイズを変更するには:

  1. 前のタスクで追加したNickname: ラベルのJTextFieldのサイズ変更のハンドルをJPanelの右端の方向にドラッグします。
  2. テキスト・フィールドとJPanelの端の間の適切なマージンを示す縦方向のガイドラインが表示されたら、マウス・ボタンを離してJTextFieldのサイズを変更します。

    JTextFieldの右端が、ガイドラインが示すJPanelの端のマージンにあわせてスナップし、GUIビルダーで適切なサイズ変更の動作が表示されます。

  3. [Ctrl]-[S]を押して、ファイルを保存します。

先頭

次の作業

位置揃えは、高度なGUIを作成するための最も基本的な方法です。前の項では、JLabelコンポーネントとJTextFieldコンポーネントをContactEditorUIフォームに追加するときにIDEの位置揃え機能を確認しました。ここでは、アプリケーションに必要な他のコンポーネントを操作しながら、GUIビルダーの位置揃え機能を詳しく見ていきます。

コンポーネントの位置揃え

注意: 下の項に関する対話型デモについては、コンポーネントの位置揃えおよびアンカー設定(.swf)スクリーンキャストを参照してください。

コンポーネントをフォームに追加すると、表示されるガイドラインが示すように、GUIビルダーによって効果的にコンポーネントの位置揃えが実行されます。ただし、複数のコンポーネント間で異なる関係を指定する必要がある場合もあります。すでに、ContactEditorのGUIに必要なJLabelを4つ追加しましたが、位置揃えは実行しませんでした。ここでは、JLabelが縦2列に並ぶようにJLabelの右端をそろえます。

コンポーネントの位置揃えを行うには:

  1. [Ctrl]キーを押したままクリックして、フォーム左側のFirst Name:およびTitle:のJLabelを選択します。
  2. ツールバーの「列内で右揃え」ボタン()をクリックします。いずれかのJLabelを右クリックし、ポップアップ・メニューから「位置揃え」>「列の右」を選択することもできます。
  3. この操作をLast Name:Nickname:の各JLabelにも繰り返します。

    各JLabelの表示テキストの右端がそろうように、JLabelの位置が調整されます。アンカーの関係が更新され、コンポーネントがグループ化されたことを示します。

追加したJTextFieldの操作を終了する前に、JLabelの間に挿入した2つのJTextFieldが正しくサイズ変更されるように設定されていることを確認します。フォームの右端まで拡張した2つのJTextFieldとは異なり、挿入したコンポーネントのサイズ変更の動作は自動的に設定されません。

コンポーネントのサイズ変更の動作を設定するには:

  1. GUIビルダーで、挿入した2つのJTextFieldコンポーネントを[Ctrl]を押しながらクリックし、選択します。
  2. 両方のJTextFieldを選択した状態で、いずれか一方を右クリックし、ポップアップ・メニューから「自動サイズ変更」>「水平」を選択します。

    JTextFieldは実行時に水平方向にサイズ変更するように設定されます。ガイドラインとアンカーのインジケータが更新され、コンポーネントの関係を視覚的なフィード・バックで示します。

コンポーネントを同じサイズにするには:

  1. フォーム内の4つのJTextFieldをすべて[Ctrl]を押しながらクリックして選択します。
  2. JTextFieldが選択された状態で、いずれか1つを右クリックし、ポップアップ・メニューから「同じサイズを設定」>「同じ幅」を選択します。

    JTextFieldがすべて同じ幅に設定され、コンポーネントの関係を視覚的なフィード・バックで示すインジケータが各JTextFieldの上端に追加されます。

ここで、JComboBoxを説明する別のJLabelを追加します。JComboBoxは、ContactEditorアプリケーションに表示する情報の形式をユーザーが選択できます。

JLabelとコンポーネント・グループの位置揃えを実行するには:

  1. 「パレット」ウィンドウで、「Swing」カテゴリから「ラベル」コンポーネントを選択します。
  2. JPanelの左側のFirst Name:Title:の各JLabelの下にカーソルを移動します。新しいJLabelの右端が、その上にあるコンポーネント・グループ(2つのJLabel)の右端とそろっていることを示すガイドラインが表示されたら、クリックしてコンポーネントを配置します。

    次の図に示すように、JLabelの右端が、上にあるJLabelの列の右端とそろっている位置にスナップします。GUIビルダーでは、コンポーネントの間隔とアンカーの関係を示す位置揃えの状態線が更新されます。

位置揃えされたJLabel

前の例と同様に、JLabelをダブルクリックして表示テキストを選択し、表示名に「Display Format:」と入力します。JLabelがスナップするとき、表示テキストの長さにあわせて他のコンポーネントの位置が調整されます。

ベースラインの位置揃え

テキストを含むコンポーネント(JLabel、JTextFieldなど)を追加または移動するときには、コンポーネント内のテキストのベースラインに基づいて適切な位置がガイドラインで表示されます。たとえば、上記でJTextFieldを挿入したとき、隣接するJLabelにベースラインが自動的にそろえられました。

ここで、ContactEditorアプリケーションに表示する情報の形式をユーザーが選択できるコンボ・ボックスを追加します。JComboBoxを追加するとき、そのベースラインをJLabelのテキストのベースラインにそろえます。このとき、位置決めに使用できるベースラインのガイドラインが表示されます。

コンポーネントのベースラインの位置揃えを実行するには:

  1. 「パレット」ウィンドウで、「Swingコントロール」カテゴリから「コンボ・ボックス」コンポーネントを選択します。
  2. 追加したJLabelの右側にカーソルを移動します。JComboBoxのベースラインがJLabelのテキストのベースラインとそろっていることを示す横方向のガイドラインが表示され、2つのコンポーネントの適切な間隔を示す縦方向のガイドラインが表示されたら、クリックしてコンボ・ボックスを配置します。

    次の図に示すように、コンポーネントは、ベースラインが、左側にあるJLabel内のテキストのベースラインとそろっている位置にスナップします。GUIビルダーに、コンポーネントの間隔とアンカーの関係を示す状態線が表示されます。

位置揃えされたコンボ・ボックス

JComboBoxのサイズを変更するには:

  1. GUIビルダーでコンボ・ボックスを選択します。
  2. JComboBoxとJPanelの間のオフセットを示すガイドラインが表示されるまで、JComboBoxの右端にあるサイズ変更のハンドルを右方向にドラッグします。

    次の図に示すように、JComboBoxの右端が、ガイドラインが示すJPanelの端のマージンにあわせてスナップし、コンポーネントの幅がフォームにあわせて自動的にサイズ変更されるように設定されます。

    サイズ変更されたコンボ・ボックス

  3. [Ctrl]-[S]を押して、ファイルを保存します。

コンポーネント・モデルの編集については、このチュートリアルで説明しないので、JComboBoxのプレースホルダの項目リストはそのままにします。

先頭

学習した内容の復習

ContactEditorのGUIの作成は順調に進んできましたが、ここで、インタフェースに必要なコンポーネントをさらに追加しながら、これまでに学んだことを復習します。

これまでは、IDEのガイドラインを使用して、ContactEditorのGUIにコンポーネントを追加してきました。しかし、コンポーネントの配置には、アンカーも重要です。アンカーについてはまだ説明していませんが、意識せずにこの機能をすでに利用しています。前述したように、コンポーネントをフォームに追加すると、IDEではターゲットのルック・アンド・フィールに適切な配置を示すガイドラインが表示されます。新しいコンポーネントを配置すると、このコンポーネントは、コンポーネント間の関係が実行時に維持されるように、最も近いコンテナの端またはコンポーネントにアンカーで固定されます。この項では、GUIビルダーによってバックグラウンドで実行される処理を確認しながら、作業をより合理的に行う方法について説明します。

追加、位置揃え、アンカー

GUIビルダーを使用すると、一般的なワークフローを合理化し、短時間で簡単にフォームのレイアウトを調整できます。コンポーネントをフォームに追加すると、GUIビルダーで適切な位置にコンポーネントが自動的にスナップされ、必要なチェーン関係が設定されるため、複雑な実装の詳細を操作せずに、フォームのデザインに専念できます。

JLabelの表示テキストの追加、位置揃え、および編集を実行するには:

  1. 「パレット」ウィンドウで、「Swingコントロール」カテゴリから「ラベル」コンポーネントを選択します。
  2. フォーム内の一番下のJPanelの「E-mail」タイトルの下にカーソルを移動します。JLabelが、上端と左端にマージンを残してJPanelの左上隅にあることを示すガイドラインが表示されたら、クリックしてJLabelを配置します。
  3. JLabelをダブルクリックして表示テキストを選択します。「E-mail Address:」と入力して、[Enter]を押します。

    JLabelが、フォーム内の適切な位置にスナップし、JPanelの上端と左端にアンカーで固定されます。前と同じように、そのコンポーネントを表す対応するノードが「ナビゲータ」ウィンドウに追加されます。

JTextFieldを追加するには:

  1. 「パレット」ウィンドウで、「Swingコントロール」カテゴリから「テキスト・フィールド」コンポーネントを選択します。
  2. 追加したE-mail Addressラベルの右側にカーソルを移動します。JTextFieldのベースラインがJLabelのテキストのベースラインとそろっていることを示すガイドラインが表示され、2つのコンポーネントの適切なマージンを示す縦方向のガイドラインが表示されたら、クリックしてテキスト・フィールドを配置します。

    JTextFieldがE-mail Address: JLabelの右側にスナップし、JLabelに関連付けられます。対応するノードが「インスペクタ」ウィンドウに追加されます。

  3. JTextFieldとJPanelの間の適切なオフセットを示すガイドラインが表示されるまで、JTextFieldの右端にあるサイズ変更のハンドルをJPanelの右端の方向にドラッグします。

    JTextFieldの右端が、適切なマージンを示すガイドラインにスナップします。

ここで、ContactEditorの連絡先リスト全体を表示するJListを追加します。

JListを追加してサイズを変更するには:

  1. 「パレット」ウィンドウで、「Swingコントロール」カテゴリから「リスト」コンポーネントを選択します。
  2. 前の手順で追加したE-mail Address JLabelの下にカーソルを移動します。JListの上端と左端に、JPanelの左端と上のJLabelとの間の適切なマージンとそろっていることを示すガイドラインが表示されたら、クリックしてJListを配置します。
  3. 上のJTextFieldと幅が同じであることを示すガイドラインが表示されるまで、JListの右側にあるサイズ変更のハンドルをJPanelの右端の方向にドラッグします。

    JListは、ガイドラインが示す位置にスナップし、対応するノードが「インスペクタ」ウィンドウに表示されます。また、新しく追加したJListが入るようにフォームが拡張されます。

追加され、サイズ変更されたJList

JListは、多数のデータのリストの表示に使用するので、通常はJScrollPaneを追加する必要があります。GUIビルダーでは、JScrollPaneが必要なコンポーネントを追加すると、JScrollPaneが自動的に追加されます。JScrollPaneは不可視コンポーネントなので、GUIビルダーによって作成されたJScrollPaneを表示または編集するには、「インスペクタ」ウィンドウを使用する必要があります。

コンポーネントのサイズ設定

注意: 下の項に関する対話型デモについては、コンポーネントのサイズ変更およびインデント(.swf)スクリーンキャストを参照してください。

モーダル・ダイアログ内のボタンなど、複数の関連するコンポーネントを同じサイズにすると、視覚的な一貫性を保つことができます。このことを示すため、この後の各図に示すように、連絡先リストの各エントリを追加、編集、および除去できる4つのJButtonをContactEditorフォームに追加します。その後、4つのボタンを同じサイズにして、これらのボタンが関連する機能を提供することがすぐにわかるようにします。

複数のボタンの表示テキストの追加、位置揃え、および編集を実行するには:

  1. 「パレット」ウィンドウで、「Swingコントロール」カテゴリから「ボタン」コンポーネントを選択します。
  2. 下のJPanelでJButtonをE-mail Address JTextFieldの右端に移動します。JButtonのベースラインと右端が、JTextFieldのベースラインと右端とそろっていることを示すガイドラインが表示されたら、[Shift]を押しながらクリックし、最初のボタンをJFrameの右端に沿って配置します。マウス・ボタンを離すと、JButtonが入るようにJTextFieldの幅が小さくなります。

    位置揃えされたJButton

    追加されたJButton

  3. 下のJPanel内のJListの右上隅にカーソルを移動します。JButtonの上端と右端が、JListの上端と右端とそろっていることを示すガイドラインが表示されたら、[Shift]を押しながらクリックし、2つ目のボタンをJFrameの右端に沿って配置します。

    追加された2つ目のJButton

  4. 追加した2つのボタンの下にさらにJButtonを2つ縦に追加します。これらのJButtonは、ガイドラインに従い、間隔が同じになるように配置します。最後のJButtonを配置する前に[Shift]キーを離さなかった場合は、[Esc]キーを押します。

    追加された2つのJButton

  5. 各JButtonの表示テキストを設定します。(ボタンのテキストを編集するには、ボタンを右クリックして「テキストを編集」を選択します。または、ボタンをクリックし、しばらくしてからもう一度クリックすることもできます。)一番上のボタンは「Add」、2つ目のボタンは「Edit」、3つ目のボタンは「Remove」、4つ目のボタンは「As Default」にします。

    JButtonコンポーネントはガイドラインが示す位置にスナップします。名前の長さにあわせてボタンの幅が変わります。

    名前変更されたJButton

ボタンを配置したら、これらのボタンが関連する機能であることを明確にするため、また視覚的な一貫性を保つために、4つのボタンを同じサイズにします。

コンポーネントを同じサイズにするには:

  1. [Ctrl]キーを押しながらJButtonを選択し、4つすべてのJButtonを選択します。
  2. いずれか1つを右クリックし、ポップアップ・メニューから「同じサイズ」>「同じ幅」を選択します。

    すべてのJButtonが、最も長い名前のボタンと同じサイズになります。

    同じサイズに設定されたJButton

インデント設定

コンポーネント下の複数のコンポーネントをまとめ、これらのコンポーネントが関連する機能のグループに属することを明確にする必要がある場合があります。たとえば、1つのラベルの下に複数の関連するチェックボックスを配置する場合があります。GUIビルダーでは、オペレーティング・システムのルック・アンド・フィールに適切なオフセットを示す特殊なガイドラインによって、インデントを簡単に設定できます。

この項では、ユーザーがアプリケーションでデータを表示する方法をカスタマイズできる複数のJRadioButtonをJLabelの下に追加します。作業を行うときには、この後の各図を参照してください。また、手順の後の「デモを表示」のリンクをクリックすると、対話型デモが表示されます。

JLabelの下のJRadioButtonのインデントを設定するには:

  1. フォームのJListの下にMail FormatというJLabelを追加します。ラベルは左端を上にあるJListの左端にそろえます。
  2. 「パレット」ウィンドウで、「Swing」カテゴリから「ラジオ・ボタン」コンポーネントを選択します。
  3. 追加したJLabelの下にカーソルを移動します。JRadioButtonの左端がJLabelの左端とそろっていることを示すガイドラインが表示されたら、セカンダリ・インデント設定のガイドラインが表示されるまで、JRadioButtonを右に移動します。[Shift]を押しながらクリックし、最初のラジオ・ボタンを配置します。

    JRadioButtonに対するセカンダリ・インデント設定のガイドライン

  4. カーソルを最初のJRadioButtonの右側に移動します。[Shift]を押しながらクリックして、2つ目と3つ目のJRadioButtonを配置します(このとき、提示されたコンポーネントの間隔に従います)。[Shift]キーは、最後のJRadioButtonを配置する前に離します。
  5. 各JRadioButtonの表示テキストを設定します。(ボタンのテキストを編集するには、ボタンを右クリックして「テキストを編集」を選択します。または、ボタンをクリックし、しばらくしてからもう一度クリックすることもできます。)左端のラジオ・ボタンは「HTML」、2つ目のラジオ・ボタンは「Plain Text」、3つ目のラジオ・ボタンは「Custom」にします。

    3つのJRadioButtonがフォームに追加され、Mail Format JLabelの下でインデントが設定されます。

    追加して名前変更された3つのJRadioButton

ここで、3つのJRadioButtonをButtonGroupに追加し、一度に1つのラジオ・ボタンのみを選択できる切替えの動作を有効にします。これにより、ContactEditorアプリケーションの連絡先情報が、順番に選択したメール形式で表示されます。

JRadioButtonをButtonGroupに追加するには:

  1. 「パレット」ウィンドウで、「Swingコントロール」カテゴリから「ボタン・グループ」コンポーネントを選択します。
  2. GUIビルダーのデザイン領域内の任意の場所をクリックし、ButtonGroupコンポーネントをフォームに追加します。ButtonGroupはフォーム自体には表示されませんが、ナビゲータの「他のコンポーネント」領域に表示されることに注意してください。
  3. フォーム内の3つのJRadioButtonをすべて選択します。
  4. 「プロパティ」ウィンドウで、buttonGroupプロパティのコンボ・ボックスからbuttonGroup1を選択します。

    3つのJRadioButtonがボタン・グループに追加されます。

    ボタン・グループに追加される3つのJRadioButton

  5. [Ctrl]-[S]を押して、ファイルを保存します。

先頭

最後の調整

ContactEditorアプリケーションの大まかなGUIが完成しましたが、まだ必要な作業が残っています。この項では、GUIビルダーによって合理化される他の一般的なレイアウト作業を確認します。

仕上げ

ユーザーが、入力した連絡先情報を確定して連絡先リストに追加するか、入力を取り消してデータベースの変更を中止できるボタンを追加します。この手順では、2つの必要なボタンを追加した後、表示テキストの長さが違ってもボタンのサイズが同じになるように編集します。

ボタンの表示テキストを追加および編集するには:

  1. 下のJPanelが、JFrameフォームの下端まで拡張されている場合は、JFrameの下端を下にドラッグします。これで、JFrameの端とJPanelの端の間に「OK」ボタンと「Cancel」ボタン用のスペースができます。
  2. 「パレット」ウィンドウで、「Swingコントロール」カテゴリから「ボタン」コンポーネントを選択します。
  3. フォーム内のE-mail JPanelの下にカーソルを移動します。JButtonの右端がJFrameの右下隅とそろっていることを示すガイドラインが表示されたら、クリックしてボタンを配置します。

    JPanelの下に追加されたボタン

  4. 別のJButtonを最初のJButtonの左側に追加します。このとき、JFrameの下端に沿ってガイドラインが示す間隔で配置します。
  5. 各JButtonの表示テキストを設定します。左側のボタンには「OK」、右側のボタンには「Cancel」と入力します。名前の長さにあわせてボタンの幅が変わります。
  6. 両方のJButtonを選択し、いずれか一方を右クリックし、ポップアップ・メニューから「同じサイズ」>「同じ幅」を選択することで2つのボタンを同じサイズにします。

    同じサイズに設定されたボタン

    JButtonコンポーネントがフォームに表示され、それに対応するノードが「ナビゲータ」ウィンドウに表示されます。JButtonコンポーネントのコードがフォームのソース・ファイルに追加されます。このコードは、エディタのソース・ビューで確認できます。各JButtonが、最も長い名前のボタンと同じサイズになります。

  7. [Ctrl]-[S]を押して、ファイルを保存します。

最後に、各コンポーネントのプレースホルダのテキストを削除します。フォームの大まかなレイアウトが完成した後にプレースホルダのテキストを除去すると、コンポーネントの位置揃えやアンカーの関係の問題を避けることができますが、ほとんどの開発者はコンポーネントを配置しながらこのテキストを除去します。フォーム内で各JTextFieldのプレースホルダのテキストを選択し、削除します。JComboBoxとJListのプレースホルダの項目は、別のチュートリアルで使用するので残しておきます。

先頭

GUIのプレビュー

ContactEditorのGUIを正常にビルドできたので、インタフェースを試してその結果を確認することができます。GUIビルダーのツールバーの「プレビュー」ボタン()をクリックすることで、作業中のフォームをプレビューできます。専用のウィンドウにフォームが開き、ビルドおよび実行する前にフォームをテストできます。

フォームのプレビュー

先頭

GUIアプリケーションのデプロイ

GUIビルダーを使用して作成したインタフェースがIDEなしでも機能するためには、GroupLayoutレイアウト・マネージャのクラスを対象にアプリケーションをコンパイルし、さらに、実行時にそれらのクラスを有効にしておく必要があります。それらのクラスは、Java SE 5でなくJava SE 6に含まれています。Java SE 5で実行するアプリケーションを開発する場合は、アプリケーションでSwingレイアウト拡張ライブラリを使用する必要があります。

JDK 5でIDEを実行している場合は、Swingレイアウト拡張ライブラリを使用するように、自動的にアプリケーション・コードが生成されます。アプリケーションをデプロイするときは、アプリケーションにSwingレイアウト拡張ライブラリを含める必要があります。アプリケーションをビルドすると(「ビルド」>「メイン・プロジェクトのビルド」)、IDEによってライブラリのJARファイルのコピーがアプリケーションのdist/libフォルダに自動的に配置されます。また、IDEによってdistフォルダ内の各JARファイルが、アプリケーションJARファイルのmanifest.mfファイルにあるClass-Path要素にも追加されます。

JDK 6でIDEを実行している場合は、Java SE 6のGroupLayoutクラスを使用するように、アプリケーション・コードが生成されます。これは、インストールされているJava SE 6を使用してシステムを実行するようにアプリケーションをデプロイでき、Swingレイアウト拡張ライブラリを使用してアプリケーションをパッケージ化する必要がないことを意味します。

注意: JDK 6を使用してアプリケーションを作成するが、そのアプリケーションをJava SE 5でも実行する必要がある場合、Java SE 6のクラスでなく、Swingレイアウト拡張ライブラリを使用するようにコードを生成することができます。GUIエディタでContactEditorUIを開きます。ナビゲータで、フォームの「ContactEditorUI」ノードを右クリックし、ポップアップ・メニューで「プロパティ」を選択します。「プロパティ」ダイアログ・ボックスで、「レイアウト生成スタイル」プロパティの値を「Swingレイアウト拡張統合」に変更します。

スタンドアロンのGUIアプリケーションの配布と実行

GUIアプリケーションをIDE外に配布する準備を行うには:

  • プロジェクトのdistフォルダをZIPアーカイブに圧縮します。distフォルダにlibフォルダが含まれる場合は、このフォルダも含める必要があります。

アプリケーションを実行するには、プロジェクト名を右クリックし、コンテキスト・メニューの「実行」を選択します。「プロジェクトの実行」ダイアログで、メイン・クラス名(たとえば、ここで作成したプロジェクトの場合は「my.contacteditor.ContactEditorUI」)を選択し、「OK」をクリックします。アプリケーションが起動し実行中です。

スタンドアロンのGUIアプリケーションをコマンド行から実行するには:

  1. プロジェクトのdistフォルダまで移動します。
  2. 次を入力します。
    java -jar <jar_name>.jar

注意: 次のエラーが発生する場合があります。

Exception in thread "main" java.lang.NoClassDefFoundError: org/jdesktop/layout/GroupLayout$Group

manifest.mfファイルで、現在インストールされているバージョンのSwingレイアウト拡張ライブラリが指定されていることを確認してください。

先頭


関連項目

これでSwing GUIのデザインのチュートリアルは完了です。作成するGUIに機能を追加する方法については、次のドキュメントを参照してください。

先頭

get support for the NetBeans

Support


By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2013, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo