ここで使用する方法
ここでは、次のサンプルを使用して進めていきたいと思います。
Sample_3.java
ここで紹介しているソースのほとんどは以前説明したものなので割愛します。
ここでは新しく出てきたContainerについて説明します。
Containerはここでは「コンテナ」を意味し、ボタン、メニューバー等は
ここに配置します。その為には「コンテナ」を取得する必要があります。
ます、Container gcp;でコンテナ型の変数をひとつ定義します。
コンストラクタ内でgcp = ・・・という処理がありますが、これがコンテナを
取得するソースになります。後々説明していきますが、今はこの考え方で
かまいません。
ボタンの追加
ここではコマンドボタンを追加する方法を説明します。
前もって、サンプルをダウンロードします。
今回は、ボタンをクリックしたらウィンドウを閉じるプログラムを作成しましょう。
ボタンを追加するには、まずボタンを生成する必要があります。
Visibleメソッドの前に次の2文を加えます。
JButton jb = new JButton("END");・・・ENDというラベルのボタンを作成します。
gcp.add(jb);・・・「コンテナ」にボタンを追加します。
このソースの先頭部分、public class 〜の最後尾に次の記述を追加します。
implements ActionListener
そして、次のメソッドを追加します。
public void actionPerformed(ActionEvent e){
}
このメソッドにはボタンがクリックされたときの処理を記述します。このメソッドがないと
エラーとしてはじかれます。そしてこのメソッド内にウィンドウを閉じるという意味の次の
文を追加します。
System.exit(1);
そして、ボタンには「クリックしたときに、どのプログラム内にあるactionPerformedメソッド
を処理すればよいか?」を伝える必要があります。それを表現しているのが24行目です。
(JButtonのインスタンス).addActionListener(this);です。今回はこのプログラム(Sample_3)
内のactionPerformedを使うため、thisを設定します。
ボタンを追加する部分はこれでよいのですが、これでは一画面全体にボタンが表示されてしまうので
次の文をボタンを生成する前に追加します。
gcp.setLayout(new FlowLayout());
これはレイアウトを設定する文です。詳しいことは後述します。
また、これではボタンの色と背景色が同じなので、次の文で背景色を変更します。(青に設定)
gcp.setBackground(Color.blue);
プログラムを実行します。ちゃんとボタンは表示されましたか?
サンプル
メニューバーの追加
今回はメニューバーの設置について説明します。メニューバーとはタイトルバーの
すぐ下にある”ファイル”とか”編集”とか書いてあるバーのことです。
今回は、終了と書いてあり、クリックすると終了というポップアップ画面
が出て、クリックするとウィンドウを閉じる プログラムを作成しましょう。
サンプルをコピーし、コンストラクタの前に以下の記述を追加します。
JMenuBar mb;
JMenu mn;
JMenuItem mi1;
JMenuBarというのはメニューバーをあらわすインスタンスです。JMenuというのは
メニューバーを構成する要素(TeraPadの場合、"ファイル","編集"など)をあらわします。
JMenuItemはJMenuの中にある要素(TeraPadの場合、"ファイル"の中に"新規作成"や"開く"などがある)
をあらわします。ここではそれぞれ変数を宣言しています。表示させたい数に応じて
宣言する数を増やします。
今回はメニューバーを使用するということでボタンのときと同じくActionListenerを使用します。
このソースの先頭部分、public class 〜の最後尾に次の記述を追加します。
implements ActionListener
そして、次のメソッドを追加します。
public void actionPerformed(ActionEvent e){
}
このメソッドにはボタンがクリックされたときの処理を記述します。このメソッドがないと
エラーとしてはじかれます。そしてこのメソッド内にウィンドウを閉じるという意味の次の
文を追加します。
System.exit(1);
次に、Insets〜の前の部分に次の文を追加します。
mb = new JMenuBar();
jframe.setJMenuBar(mb);
mn = new JMenu("終了");
mb.add(mn);
mi1 = new JMenuItem("終了");
mn.add(mi1);
mi1.addActionListener(this);
1行目はメニューバーのインスタンスを生成します。2行目ではjframe(ウィンドウ)にmb(メニューバー)
を追加します。3行目では"終了"というメニュータイトルのメニューを生成します。4行目で先ほど生成した
mn(メニュー)を追加しています。5行目では"終了"というタイトルのメニューアイテムを生成します。
6行目では先ほど生成したメニューアイテムをメニューに追加しています。7行目ではメニューアイテムに対し、
「クリックしたときに、どのプログラム内にあるactionPerformedメソッド
を処理すればよいか?」を指定します。今回はこのプログラム(Sample_3)
内のactionPerformedを使うため、thisを設定します。
プログラムを実行してみてください。ちゃんと思い通りに動いていますか?
サンプル
ダイアログボックスの表示
次に、ダイアログボックスを表示させる方法を説明します。ワードなどで
データを未保存のまま×ボタンを押すと、警告メッセージが表示されますよね?
あのようなものをダイアログボックスと呼びます。今回はウィンドウの×ボタンを
押したときに、終了確認を促すダイアログボックスを表示させ、"はい"をクリック
したときはウィンドウを閉じて、"いいえ"をクリックしたときは終了しない という
プログラムを作成しましょう。
サンプルをコピーし、コンストラクタの前に次の文を追加します。
JOptionPane dig;
本来ならば、Dialogクラスを用いて、そこにボタンを生成し、メッセージを書いて・・
とやるところなのですが、それではソースが長くなり、複雑になります。そこでjavaxでは
あらかじめ、ある程度のダイアログボックスの型を認識したクラスを用意しています。
それがJOptionPaneです。後述しますが、ダイアログボックスの名前と型を指定するだけで
簡単にダイアログボックスを表示できます。
次に、コンストラクタ内のsetDefaultCloseOperation〜の文の前に次の文を追加します。
dig = new JOptionPane();
これはダイアログボックスのインスタンスを生成しています。
今回はwindowClosingメソッドを変更します。次の記述に変更します。
int ret = dig.showConfirmDialog(gcp,"プログラムを終了しますか?","終了確認",JOptionPane.YES_NO_OPTION);
if(ret == JOptionPane.YES_OPTION){
}else{
if(ret == JOptionPane.NO_OPTION){
}
}
1行目はダイアログボックスの表示部分です。第1引数にどのコンテナ上で表示するのか指定します。
ここではコンストラクタ内で生成したコンテナgcpを指定します。第2引数にダイアログボックス内に
表示させるメッセージを指定します。ここでは"プログラムを終了しますか?"としておきます。
第3引数にダイアログボックスのタイトルバーに表示する文字列を指定します。ここでは"終了確認"としておきます。
第4引数にダイアログボックスの型を指定します。この型には以下の種類があります。
JOptionPane.YES_NO_OPTION・・・はい/いいえ型
JOptionPane.YES_NO_CANCEL_OPTION・・・はい/いいえ/キャンセル型
JOptionPane.WARNING_MESSAGE・・・警告メッセージ型
JOptionPane.QUESTION_MESSAGE・・・入力プロンプト型
どう表示されるかは、実際に指定してみて確かめてください。
今回は一番上のJOptionPane.YES_NO_OPTIONを選択します。
2行目では"はい"を押されたかを聞いています。"はい"を押されたときにはretに
JOptionPane.YES_OPTIONで指定された値が格納されます。3行目では"はい"が押されたときの
処理を記述します。終了させるのですから、System.exit(1);ですね。
6行目では"いいえ"が押されたかをきいています。2行目と同様に"いいえ"を押されたときには
retにJOptionPane.NO_OPTIONで指定された値が格納されます。このときの処理は何もしませんから
空のままにしておきます。
プログラムを実行します。うまくダイアログボックスが表示されていますか?
サンプル
ラジオボタンの追加
ここではラジオボタンを追加する方法を説明します。
前もって、サンプルをダウンロードします。
今回はラジオボタンのON/OFFで背景を黄色と青に切り替えが出来るアプリケーションを
作成していきましょう。
このソースの先頭部分、public class 〜の最後尾に次の記述を追加します。
implements ActionListener
そして、次のメソッドを追加します。
public void actionPerformed(ActionEvent e){
}
このメソッドにはラジオボタンがクリックされたときの処理を記述します。このメソッドがないと
エラーとしてはじかれます。
次に、コンストラクタ内のsetVisible〜の前に次の記述を追加します。
1:ry = new JRadioButton("Yellow",true);
2:rb = new JRadioButton("Blue",false);
3:ry.addActionListener(this);
4:rb.addActionListener(this);
5:bgroup = new ButtonGroup();
6:bgroup.add(ry);
7:bgroup.add(rb);
8:jp = new JPanel(new GridLayout(2,1));
9:jp.add(ry);
10:jp.add(rb);
11:gcp.add(jp,BorderLayout.NORTH);
12:gcp.setBackground(Color.yellow);
1、2行目でラジオボタンのインスタンスを生成します。第一引数にラジオボタンの名前を
第二引数にラジオボタンのON/OFFの初期値を記述します。(true=ON,false=OFF)。
3,4行目でラジオボタンに「クリックしたときに、どのプログラム内にあるactionPerformedメソッド
を処理すればよいか?」を伝えます。引数にはthisを指定します。
5行目で、ButtonGroupのインスタンスを生成します。ラジオボタンは複数の中から、ひとつ選ぶ
という特性を持っています。しかし、ラジオボタンを生成しただけでは、独立しているのか、
ひとつのグループに属しているのかを判断できません。そこでButtonGroupを生成し、これに
登録されたものがひとつのグループと判断することで処理します。
6,7行目がその登録処理になります。8行目でJPanelというものを生成します。アプレット講座でも
説明したとおり、ラジオボタンを設置する際は、必ずパネルというものに乗せます。引数として
new GridLayout(2,1)と指定しています。これは設置するパネルの大きさとウィンドウの大きさの比率に
関係してきます。9,10行目でラジオボタンをパネルに乗せる処理を行っています。そしてそのパネルを
コンテナに乗せる処理を11行目で行っており、12行目でコンテナの背景を設定しています。
そしてactionPerformedメソッド内に次のように記述します
String ans = e.getActionCommand();
if(ans.equals("Yellow")){
gcp.setBackground(Color.yellow);
}else{
gcp.setBackground(Color.blue);
}
e.getActionCommand();はクリックされた(ラジオ)ボタンにつけられた名前
をString型(文字列)で返すコードです。今回のように(ラジオ)ボタンを
2つ以上使用する必要のある場合は、どの(ラジオ)ボタンがクリックされたか
を判定する必要があります。その時に使います。
2行目に、ans.equals("Yellow")とあります。これは「Yellowと名づけられたラジオボタン
がクリックされたら」という意味合いです。その場合は黄色に背景を切り替えるので、
gcp.setBackground(Color.yellow);とします。それ以外の場合はBlueと名づけられたラジオボタン
がクリックされたら」ということになるので(ボタンは2種類しかないため)、
青色に背景を切り替えるgcp.setBackground(Color.blue);と記述します。
プログラムを実行します。うまくプログラムは動いていますか?
サンプル
チェックボックスの追加
ここではラジオボタンを追加する方法を説明します。
前もって、サンプルをダウンロードします。
今回は絵の具の色を表現してみましょう。赤と青のチェックボックスを
設置し、両方チェックされているときは紫、一方がチェックされているときはその色を
両方チェックされていないときは白を背景色として、切り替えることの出来るプログラムを
作成しましょう。
このソースの先頭部分、public class 〜の最後尾に次の記述を追加します。
implements ItemListener
そして、次のメソッドを追加します。
public void itemStateChanged(ItemEvent e){
}
このメソッドにはチェックボックスがクリックされたときの処理を記述します。このメソッドがないと
エラーとしてはじかれます。
次に、コンストラクタ内のsetVisible〜の前に次の記述を追加します。
cr = new JCheckBox("Red");
cb = new JCheckBox("Blue");
cr.addItemListener(this);
cb.addItemListener(this);
jp = new JPanel(new GridLayout(2,1));
jp.add(cr);
jp.add(cb);
gcp.add(jp,BorderLayout.NORTH);
gcp.setBackground(Color.white);
じつは追加する手順はほとんどラジオボタンのときと同じなのです。相違点はボタングループが
必要ないぐらいです。チェックボックスはラジオボタンとは違い、いくつでも選択できるので
ボタングループを生成し、ひとつに縛るような処理は必要ないわけです。
他は、JRadiobutton→JCheckBoxになり、引数がラベル名のみになったことと、
addActionListener→addItemListenerになったぐらいです。
そしてitemStateChangedメソッド内に次の記述を追加します。
if(cr.isSelected()){
if(cb.isSelected()){
gcp.setBackground(new Color(128,0,255));
}else{
gcp.setBackground(Color.red);
}
}else{
if(cb.isSelected()){
gcp.setBackground(Color.blue);
}else{
gcp.setBackground(Color.white);
}
}
チェックボックスのON/OFFはisSelected(返り値boolean型 true:ON、false:OFF)メソッドを使い
判断します。1〜3行目は、赤、青ボタン両方ONのときの処理です。ここでは紫に設定するので、
gcp.setBackground(new Color(128,0,255));とします。new Color(128,0,255)は紫色をあらわします。
4〜5行目は赤はON、青がOFFのときの処理です。ここでは赤に設定するので、gcp.setBackground(Color.red);と
します。8〜9行目は赤がOFF、青がONのときの処理です。ここでは青に設定するので、
gcp.setBackground(Color.blue);とします。10〜11行目は赤、青両方OFFのときの処理です。
ここでは白に設定するので、gcp.setBackground(Color.white);とします。
プログラムを実行します。うまくプログラムは動いていますか?
サンプル
リストボックスの追加
テキストボックスの追加