GUIビルドの概要
執筆: Saleem GulおよびTomas Pavek
この初心者向けチュートリアルでは、単純なグラフィカル・ユーザー・インタフェースを作成し、基本的なバックエンド機能を追加する方法を示します。具体的には、Swingフォーム内のボタンとフィールドの動作をコーディングする方法を示します。
GUIのレイアウトとデザインを行い、ボタンとテキスト・フィールドをいくつか追加します。テキスト・フィールドはユーザー入力を受け取るために使用し、またプログラム出力の表示にも使用します。ボタンは、フロント・エンドに組み込まれた機能を開始します。作成するアプリケーションは、単純なものですが機能的な電卓です。
GUIビルダーのデザイン機能に関する一般的な説明(様々なデザイン機能のビデオによるデモを含む)については、NetBeans IDEでのSwing GUIのデザインを参照してください。
予想される所要時間: 20分
内容
このチュートリアルを完了するには、次のソフトウェアとリソースが必要です。
課題1: プロジェクトの作成
最初の手順では、開発するアプリケーション用のIDEプロジェクトを作成します。プロジェクトの名前はNumberAdditionにします。
- 「ファイル」>「新規プロジェクト」を選択します。または、IDEツールバーにある「新規プロジェクト」アイコンをクリックして選択することもできます。
- 「カテゴリ」ペインで「Java」ノードを選択します。「プロジェクト」ペインで「Javaアプリケーション」を選択します。「次」をクリックします。
- 「プロジェクト名」フィールドに「
NumberAddition
」と入力し、プロジェクトの場所として(たとえば、ホーム・ディレクトリ内の)パスを指定します。
- (オプション)「ライブラリの格納用に専用フォルダを使用」チェックボックスを選択し、ライブラリ・フォルダの場所を指定します。詳細は、NetBeans IDEによるアプリケーションの開発の他のユーザーとのライブラリの共有を参照してください。
- 「メイン・クラスの作成」チェックボックスが選択されている場合は選択を解除します。
- 「終了」をクリックします。
課題2: フロント・エンドのビルド
インタフェースのビルドに進むには、他の必要なGUIコンポーネントを入れるJavaコンテナを作成する必要があります。この手順では、JFrame
コンポーネントを使用してコンテナを作成します。コンテナは新しいパッケージに入れます。このパッケージは「ソース・パッケージ」ノード内に表示されます。
JFrameコンテナを作成します。
- 「プロジェクト」ウィンドウで、「NumberAddition」ノードを右クリックし、「新規」>「その他」を選択します。
- 「新規ファイル」ダイアログ・ボックスで、「Swing GUIフォーム」カテゴリおよび「JFrameフォーム」ファイル・タイプを選択します。「次」をクリックします。
- クラス名として「NumberAdditionUI」と入力します。
- パッケージとして「
my.numberaddition
」と入力します。
- 「終了」をクリックします。
IDEによって、NumberAddition
アプリケーション内にNumberAdditionUI
フォームとNumberAdditionUI
クラスが作成され、NumberAdditionUI
フォームがGUIビルダー内で開きます。my.NumberAddition
パッケージがデフォルトのパッケージに置き換わります。
コンポーネントの追加: フロント・エンドの作成
次にパレットを使用してアプリケーションのフロント・エンドにJPanelを挿入します。次にJLabelを3つ、JTextFieldを3つ、JButtonを3つ追加します。以前にGUIビルダーを使用したことがない場合は、NetBeans IDEでのSwing GUIのデザイン・チュートリアルにある有用なコンポーネントの配置に関する説明を参照してください。
前述のコンポーネントをドラッグして配置したら、JFrameは次のスクリーンショットのようになります。

IDEの右上隅に「パレット」ウィンドウが表示されない場合は、「ウィンドウ」>「パレット」を選択します。
- まず、パレットの「Swingコンテナ」カテゴリから「パネル」を選択し、それをJFrameにドロップします。
- JPanelが強調表示されている状態で、「プロパティ」ウィンドウに移動し、「境界線」の横の省略符号(...)ボタンをクリックして、境界線スタイルを選択します。
- 「境界線」ダイアログで、リストから「TitledBorder」を選択し、「タイトル」フィールドに「
Number Addition
」と入力します。「OK」をクリックして変更を保存し、ダイアログを閉じます。
- この時点で、スクリーンショットのように「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」イベントを選択すると、IDEによってActionListenerが「Exit」ボタンに自動的に追加され、リスナーのactionPerformedメソッドを処理するためのハンドラ・メソッドが生成されます。
- IDEで「ソース・コード」ウィンドウが開き、マウス・クリックまたはキーボードを使用してボタンが押されたときに実行するアクションを実装する場所までスクロールされます。「ソース・コード」ウィンドウには次の行が表示されます。
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」ボタン(
jButton2
)を右クリックします。ポップアップ・メニューから「イベント」>「アクション」>「actionPerformed」を選択します。
- 「Add」ボタンが機能するようにコードを追加します。完成したソース・コードは次のようになります。
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt){
// First we define float variables.
float num1, num2, result;
// We have to parse the text to a type float.
num1 = Float.parseFloat(jTextField1.getText());
num2 = Float.parseFloat(jTextField2.getText());
// Now we can perform the addition.
result = num1+num2;
// We will now pass the value of result to jTextField3.
// At the same time, we are going to
// change the value of result from a float to a string.
jTextField3.setText(String.valueOf(result));
}
これでプログラムは完成なので、ビルドして実行し、動作するところを確認できます。
課題4: プログラムの実行
IDEでプログラムを実行するには:
- 「実行」>「メイン・プロジェクトの実行」を選択します(または[F6]を押します)。
注意: プロジェクトNumberAdditionでメイン・クラスが設定されていないことを通知するウィンドウが表示された場合は、同じウィンドウでmy.NumberAddition.NumberAdditionUIをメイン・クラスとして選択し、「OK」をクリックします。
IDEの外部でプログラムを実行するには:
- 「実行」>メイン・プロジェクトを消去してビルド([Shift]-[F11])を選択し、アプリケーションJARファイルをビルドします。
- システムのファイル・エクスプローラまたはファイル・マネージャを使用し、
NumberAddition/dist
ディレクトリに移動します。
注意: NumberAdditionプロジェクト・ディレクトリの場所は、課題1: プロジェクトの作成の項でプロジェクトを作成するときにステップ3で指定したパスによって決まります。
NumberAddition.jar
ファイルをダブルクリックします。
数秒後、アプリケーションが起動するはずです。
注意: JARファイルをダブルクリックしてもアプリケーションが起動しない場合、使用しているオペレーティング・システムに対応するJARファイルの関連付けに関する情報をこの記事で確認してください。
アプリケーションは、コマンド行からも起動できます。
コマンド行からアプリケーションを起動するには:
- システムで、コマンド・プロンプトまたはターミナル・ウィンドウを開きます。
- コマンド・プロンプトで、ディレクトリを
NumberAddition/dist
ディレクトリに変更します。
- コマンド行に、次の文を入力します。
java -jar NumberAddition.jar
注意: アプリケーションを実行する前に、my.NumberAddition.NumberAdditionUIがメイン・クラスとして設定されていることを確認してください。これを確認するには、「プロジェクト」ペインで「NumberAddition」プロジェクト・ノードを右クリックし、ポップアップ・メニューから「プロパティ」を選択して、「プロジェクト・プロパティ」ダイアログ・ボックスで「実行」カテゴリを選択します。「メイン・クラス」フィールドに「my.numberaddition.NumberAdditionUI」と表示されます。
イベント処理の方法
このチュートリアルでは、単純なボタン・イベントに応答する方法を示しました。アプリケーションで応答できるイベントは他にも多数あります。IDEでは、GUIコンポーネントで処理できるイベントのリストを簡単に確認できます。
- エディタ内のファイル
NumberAdditionUI.java
に戻ります。「デザイン」タブをクリックして、GUIのレイアウトをGUIビルダーに表示します。
- 任意のGUIコンポーネントを右クリックし、ポップアップ・メニューから「イベント」を選択します。現時点では、メニューの内容を確認するのみで、何も選択しません。
- 「ウィンドウ」メニューから「プロパティ」を選択することもできます。「プロパティ」ウィンドウで「イベント」タブをクリックします。「イベント」タブでは、現在アクティブなGUIコンポーネントに関連付けられているイベント・ハンドラを表示および編集できます。
- アプリケーションは、キーの押下、マウスのクリック、ダブルクリック、トリプル・クリック、マウスの移動、ウィンドウのサイズやフォーカスの変更に応答できます。これらすべてのイベント・ハンドラを「イベント」メニューから作成できます。最もよく使用するイベントはActionイベントです。(イベント処理のベスト・プラクティスについては、Sunのイベントに関するJavaチュートリアルを参照。)
イベント処理はどのように機能するのでしょうか。「イベント」メニューからイベントを選択するたびに、IDEによって、いわゆるイベント・リスナーが自動的に作成され、コンポーネントに関連付けられます。次の手順に従って、イベント処理の方法を確認します。
- エディタ内のファイル
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によって自動的に行われるので、開発者はそのイベントでトリガーする実際のビジネス・ロジックの実装に専念できます。
関連項目