GUI 構築入門
執筆:
と Tomas Pavek、管理: Ruth Kusterer と Patrick Keegan
この初心者向けチュートリアルでは、簡単なグラフィカルユーザーインタフェースを作成し、簡単なバックエンド機能を追加する方法を示します。具体的には、Swing フォーム内のボタンとフィールドの動作をコーディングする方法を示します。
GUI のレイアウトとデザインを行い、ボタンとテキストフィールドをいくつか追加します。テキストフィールドはユーザー入力を受け取るために使用し、またプログラム出力の表示にも使用します。ボタンは、フロントエンドに組み込まれた機能を開始します。作成するアプリケーションは、簡単なものですが機能的な電卓です。
GUI ビルダーのデザイン機能に関する一般的な説明については、「NetBeans IDE での Swing GUI の構築」を参照してください。さまざまな機能のビデオによるデモもあります。
予想される所要時間: 15 分
目次
このチュートリアルに従うには、次のソフトウェアとリソースが必要です。
課題 1: プロジェクトの作成
最初の手順では、開発するアプリケーション用の IDE プロジェクトを作成します。プロジェクトの名前は NumberAddition にします。
- 「ファイル」>「新規プロジェクト」を選択します。または、IDE ツールバーにある「新規プロジェクト」アイコンをクリックして選択することもできます。
- 「カテゴリ」区画で「Java」ノードを選択します。「プロジェクト」区画で「Java アプリケーション」を選択します。「次へ」をクリックします。
- 「プロジェクト名」フィールドに「
NumberAddition」と入力し、プロジェクトの場所としてパス (ホームディレクトリなど) を指定します。
- 「ライブラリの格納用に専用フォルダを使用」チェックボックスは選択されていない状態のままにします。NetBeans IDE 6.0 にはこのオプションはありません。
- 「主プロジェクトとして設定」チェックボックスが選択されていることを確認します。「主クラスを作成」チェックボックスが選択されている場合は選択を解除します。
- 「完了」をクリックします。
課題 2: フロントエンドの構築
インタフェースの構築に進むには、ほかの必要な GUI コンポーネントを入れる Java コンテナを作成する必要があります。この手順では、JFrame コンポーネントを使用してコンテナを作成します。コンテナは新しいパッケージに入れます。このパッケージは「ソースパッケージ」ノード内に表示されます。
JFrame コンテナを作成します。
- 「プロジェクト」ウィンドウで「NumberAddition」ノードを右クリックし、「新規」>「JFrame フォーム」を選択します。
- クラス名として「NumberAdditionUI」と入力します。
- パッケージとして「
my.numberaddition」と入力します。
- 「完了」をクリックします。
IDE によって、NumberAddition アプリケーション内に NumberAdditionUI フォームと NumberAdditionUI クラスが作成され、NumberAdditionUI フォームが GUI ビルダー内で開きます。my.NumberAddition パッケージがデフォルトのパッケージに置き換わります。
コンポーネントの追加: フロントエンドの作成
次にパレットを使用してアプリケーションのフロントエンドに JPanel を挿入します。次に JLabel を 3 つ、JTextField を 3 つ、JButton を 3 つ追加します。GUI ビルダーの使用方法については、「NetBeans IDE での GUI 構築」のチュートリアルにあるコンポーネントの配置に関する説明を参照してください。
前述のコンポーネントをドラッグして配置したら、JFrame は次のスクリーンショットのようになります。

「パレット」ウィンドウが IDE の右上に表示されない場合は、「ウィンドウ」>「パレット」を選択します。
- パレットで JPanel を選択し、JFrame 内にドロップします。
- JPanel が強調表示されている状態で「プロパティー」ウィンドウの「ボーダー」の横の省略符号 (...) ボタンをクリックし、ボーダースタイルを選択します。
- 「ボーダー」ダイアログで、リストから「TitledBorder」を選択し、「タイトル」フィールドに「
Number Addition」と入力します。「了解」をクリックして変更を保存し、ダイアログを閉じます。
- この時点で、スクリーンショットのように「Number Addition」というタイトルの空の JFrame が表示されます。スクリーンショットを確認し、上記のように JLabel を 3 つ、JTextField を 3 つ、JButton を 3 つ追加します。
コンポーネントの名前変更
この手順では、JFrame に追加したコンポーネントの表示テキストを変更します。
jLabel1 をダブルクリックして text プロパティーを First Number に変更します。
jLabel2 をダブルクリックして text を Second Number に変更します。
jLabel3 をダブルクリックして text を Result に変更します。
jTextField1 からサンプルテキストを削除します。表示テキストを編集可能にするには、テキストフィールドをクリックし、しばらくしてからもう一度クリックします。jTextField1 を元のサイズに戻す必要がある場合があります。jTextField2 と jTextField3 についてこの手順を繰り返します。
-
jButton1 の表示テキストを Clear に変更します。ボタンのテキストを編集するには、ボタンを右クリックして「テキストを編集」を選択します。ボタンをクリックし、しばらくしてからもう一度クリックすることもできます。
-
jButton2 の表示テキストを Add に変更します。
-
jButton3 の表示テキストを Exit に変更します。
完成した GUI は次のスクリーンショットのようになります。

課題 3: 機能の追加
この課題では、「Add」、「Clear」、「Exit」の各ボタンに機能を追加します。jTextField1 ボックスと jTextField2 ボックスをユーザー入力用に、jTextField3 をプログラム出力用に使用して、簡単な電卓を作成します。それでは始めましょう。
「Exit」ボタンの機能の追加
ボタンに機能を追加するには、イベントに応答できるようにそれぞれにイベントハンドラを割り当てます。この例では、マウスまたはキーボードを使用してボタンがクリックされたときを認識できる必要があります。そこで ActionEvent に応答する ActionListener を使用します。
- 「Exit」ボタンを右クリックします。ポップアップメニューから「イベント」>「アクション」>「ActionPerformed」を選択します。メニューには、応答できるイベントがほかにも多数あります。actionPerformed イベントを選択すると、「Exit」ボタンに ActionListener が自動的に追加され、リスナーの actionPerformed メソッドを処理するためのハンドラメソッドが生成されます。
- 「ソースコード」ウィンドウが開き、マウスまたはキーボードを使用してボタンがクリックされたときに実行するアクションを実装する場所までスクロールされます。「ソースコード」ウィンドウには次の行が表示されます。
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
//TODO: Add your handling code here:
}
- 「Exit」ボタンで行う処理のコードを追加します。上記のコードの TODO 行を削除して、代わりに「System.exit(0);」と入力します。完成した「Exit」ボタンのコードは次のようになります。
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
「Clear」ボタンの機能の追加
- 作業領域の上部にある「デザイン」タブをクリックし、フォームのデザインに戻ります。
- 「Clear」ボタン (
jButton1) を右クリックします。ポップアップメニューから「イベント」>「アクション」>「actionPerformed」を選択します。
- 「Clear」ボタンでは、jTextField のテキストをすべて消去します。そのためには、前述のようにコードを追加します。完成したソースコードは次のようになります。
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){
jTextField1.setText("");
jTextField2.setText("");
jTextField3.setText("");
}
上記のコードでは、3 つの JTextField 内の既存のテキストを空白で上書きすることで、テキストを空にしています。
「Add」ボタンの機能の追加
「Add」ボタンでは、3 つのアクションを実行します。
jTextField1 と jTextField2 からユーザー入力を受け取り、入力内容を文字列型から浮動小数点に変換します。 - 2 つの数値を加算します。
- その和を文字列型に変換して
jTextField3に挿入します。
それでは始めましょう。
- 作業領域の上部にある「デザイン」タブをクリックし、フォームのデザインに戻ります。
- 「Add」ボタン (
jButton3) を右クリックします。ポップアップメニューから「イベント」>「アクション」>「actionPerformed」を選択します。
- 「Add」ボタンが機能するようにコードを追加します。完成したソースコードは次のようになります。
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt){
// 浮動小数点の変数の定義
float num1, num2, result;
// テキストを浮動小数点に解析
num1 = Float.parseFloat(jTextField1.getText());
num2 = Float.parseFloat(jTextField2.getText());
// 加算
result = num1+num2;
// 結果の値を jTextField3 に渡す
// 同時に結果の値を浮動小数点から
// 文字列に変換
jTextField3.setText(String.valueOf(result));
}
これでプログラムは完成なので、構築して実行し、動作するところを確認できます。
課題 4: プログラムの実行
最後のステップでは、プログラムを構築して実行します。
- 「構築」>「主プロジェクトを構築」を選択します。
- 構築の出力が終了したら、「実行」>「主プロジェクトを実行」を選択します。
- プロジェクト NumberAddition で主クラスが設定されていないことを通知するウィンドウが表示された場合は、同じウィンドウで my.NumberAddition.NumberAdditionUI を主クラスとして選択し、「了解」ボタンをクリックします。
- 作成したプログラムが実行されます。
このチュートリアルでは、NetBeans GUI ビルダーを使用して GUI コンポーネントに機能を関連付ける方法を学びました。
イベント処理の方法
このチュートリアルでは、簡単なボタンイベントに応答する方法を示しました。アプリケーションで応答できるイベントはほかにも多数あります。IDE では、GUI コンポーネントで処理できるイベントのリストを簡単に確認できます。
- エディタ内のファイル
NumberAdditionUI.java に戻ります。「デザイン」タブをクリックして、GUI のレイアウトを GUI ビルダーに表示します。
- 任意の GUI コンポーネントを右クリックし、ポップアップメニューから「イベント」を選択します。現時点では、メニューの内容を確認するだけで、何も選択しません。
- 「ウィンドウ」メニューから「プロパティー」を選択することもできます。「プロパティー」ウィンドウで「イベント」タブをクリックします。「イベント」タブでは、現在アクティブな GUI コンポーネントに関連付けられているイベントハンドラを表示および編集できます。
- アプリケーションは、キーの押下、マウスのクリック、ダブルクリック、トリプルクリック、マウスの移動、ウィンドウのサイズやフォーカスの変更に応答できます。 これらすべてのイベントハンドラを「イベント」メニューから作成できます。もっともよく使用するイベントは Action イベントです。イベント処理のベストプラクティスについては、Sunのイベントに関する Java チュートリアルを参照してください。
イベント処理はどのように機能するのでしょうか。「イベント」メニューからイベントを選択すると、イベントリスナーが自動的に作成され、コンポーネントに関連付けられます。次の手順に従って、イベント処理の方法を確認します。
- エディタ内のファイル
NumberAdditionUI.java に戻ります。「ソース」タブをクリックして GUI のソースを表示します。
- 下にスクロールし、実装した
jButton1ActionPerformed()、jButton2ActionPerformed()、jButton3ActionPerformed() の各メソッドを確認します。これらのメソッドをイベントハンドラと呼びます。
- 次に
initComponents() というメソッドまでスクロールします。 このメソッドが表示されない場合は、「生成されたコード」と表示されている行を探し、その横の + 記号をクリックして、収縮されている initComponents() メソッドを展開します。
initComponents() メソッドは、青いブロックで囲まれています。このコードは IDE によって自動的に生成されたものであり、編集できません。
- 次に
initComponents() メソッドの中を見てみます。このメソッドには、GUI コンポーネントを初期化し、フォームに配置するコードが含まれます。このコードは、デザインビューでコンポーネントを配置し、編集したときに自動的に生成、更新されています。
initComponents() 内で次のコードまでスクロールします。
jButton3.setText("Exit");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});
この箇所で、GUI コンポーネントにイベントリスナーオブジェクトが追加されています。この例では、ActionListener を jButton3 に登録しています。 ActionListener インタフェースには ActionEvent オブジェクトを受け取る actionPerformed メソッドがあります。これは jButton3ActionPerformed イベントハンドラを呼び出すことで実装されています。このボタンは、アクションイベントを待機しています。ボタンがクリックされると ActionEvent が生成され、リスナーの actionPerformed メソッドに渡されます。このメソッドによって、このイベントのイベントハンドラに入力したコードが実行されます。
一般に、応答できるためには、対話型の GUI コンポーネントがイベントリスナーに登録され、イベントハンドラを実装する必要があります。イベントリスナーの関連付けは NetBeans IDE によって自動的に行われるので、開発者はそのイベントでトリガーする実際のビジネスロジックの実装に専念できます。
関連項目
質問があるかサポートが必要で、NetBeans IDE の機能の最新の開発状況を知りたい場合は、
のメーリングリストに登録してください。登録するには、
に空のメッセージを送信します。