GUI 構築入門
執筆: Saleem Gul および Tomas Pavek
この初心者向けチュートリアルでは、簡単なグラフィカルユーザーインタフェースを作成し、簡単なバックエンド機能を追加する方法を示します。具体的には、Swing フォーム内のボタンとフィールドの動作をコーディングする方法を示します。
GUI のレイアウトとデザインを行い、ボタンとテキストフィールドをいくつか追加します。テキストフィールドはユーザー入力を受け取るために使用し、またプログラム出力の表示にも使用します。ボタンは、フロントエンドに組み込まれた機能を開始します。作成するアプリケーションは、簡単なものですが機能的な電卓です。
GUI ビルダーのデザイン機能に関する一般的な説明については、「NetBeans IDE での Swing GUI のデザイン」を参照してください。さまざまなデザイン機能のビデオによるデモも含まれています。
予想される所要時間: 15 分
目次
このチュートリアルを完了するには、次のソフトウェアとリソースが必要です。
課題 1: プロジェクトの作成
最初の手順では、開発するアプリケーション用の IDE プロジェクトを作成します。プロジェクトの名前は NumberAddition にします。
- 「ファイル」>「新規プロジェクト」を選択します。または、IDE ツールバーにある「新規プロジェクト」アイコンをクリックして選択することもできます。
- 「カテゴリ」区画で「Java」ノードを選択します。「プロジェクト」区画で「Java アプリケーション」を選択します。「次へ」をクリックします。
- 「プロジェクト名」フィールドに「
NumberAddition」と入力し、プロジェクトの場所として (たとえば、ホームディレクトリ内の) パスを指定します。
- (任意) 「ライブラリの格納用に専用フォルダを使用」チェックボックスを選択し、ライブラリフォルダの場所を指定します。このオプションの詳細は、「プロジェクトライブラリの共有」を参照してください。
- 「主プロジェクトとして設定」チェックボックスが選択されていることを確認します。
- 「主クラスを作成」チェックボックスが選択されている場合は選択を解除します。
- 「完了」をクリックします。
課題 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」と入力します。「了解」をクリックして変更を保存し、ダイアログを閉じます。
- この時点で、スクリーンショットのように「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」ボタンを右クリックします。ポップアップメニューから「イベント」>「Action」>「actionPerformed」を選択します。メニューには、応答できるイベントがほかにも多数あります。「actionPerformed」イベントを選択すると、IDE によって ActionListener が「Exit」ボタンに自動的に追加され、リスナーの actionPerformed メソッドを処理するためのハンドラメソッドが生成されます。
- 「ソースコード」ウィンドウが開き、マウスまたはキーボードを使用してボタンがクリックされたときに実行するアクションを実装する場所までスクロールされます。「ソースコード」ウィンドウには次の行が表示されます。
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
//TODO 処理コードをここに追加します:
}
- 「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) を右クリックします。ポップアップメニューから「イベント」>「Action」>「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: プログラムの実行
IDE でプログラムを実行するには、次の手順に従います。
- 「実行」>「主プロジェクトを実行」を選択します (または、F6 キーを押します)。
- プロジェクト NumberAddition で主クラスが設定されていないことを通知するウィンドウが表示された場合は、同じウィンドウで my.NumberAddition.NumberAdditionUI を主クラスとして選択し、「了解」ボタンをクリックします。
IDE の外部でプログラムを実行するには、次の手順に従います。
- 「実行」>「主プロジェクトの生成物を削除して構築」(Shift-F11) を選択し、アプリケーション JAR ファイルを構築します。
- システムのファイルエクスプローラまたはファイルマネージャーを使用し、
NumberAddition/dist ディレクトリに移動します。
NumberAddition.jar ファイルをダブルクリックします。
数秒後、アプリケーションが起動するはずです。
注: JAR ファイルをダブルクリックしてもアプリケーションが起動しない場合、使用しているオペレーティングシステムに対応する JAR ファイルの設定に関する情報をこの記事で確認してください。
アプリケーションは、コマンド行からも起動できます。
コマンド行からアプリケーションを起動するには、次の手順に従います。
- システムで、コマンドプロンプトまたはターミナルウィンドウを開きます。
- コマンドプロンプトで、ディレクトリを
NumberAddition/dist ディレクトリに変更します。
- コマンド行に、次の文を入力します。
java -jar NumberAddition.jar
イベント処理の方法
このチュートリアルでは、簡単なボタンイベントに応答する方法を示しました。アプリケーションで応答できるイベントはほかにも多数あります。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 によって自動的に行われるので、開発者はそのイベントでトリガーする実際のビジネスロジックの実装に専念できます。
関連項目