Java 言語 第 8 回ウインドウ部品を用いる (1) 知的情報システム工学科 久保川淳司 kubokawa@me.it-hiroshima.ac.jp
前回の課題 (1) マウスを使って, 前回課題で作成した 6 4 のマスの図形で, \ をマウスクリックによって代わるようにしなさい
前回の課題 (2) import java.applet.applet; import java.awt.*; import java.awt.event.*; /* <APPLET CODE="JaMouseKadai.class" WIDTH=300 HEIGHT=200> </APPLET>*/ public class JaMouseKadai extends Applet{ int pos[][] = new int[6][4]; // pos[][] は 2 次元配列であり, そのポジションの図形を表す public void init() { addmouselistener( new MouseAdapter() { // アダプタクラスを利用する public void mouseclicked(mouseevent me) { // 座標に対応する pos[][] を 1 増やす repaint(); // 再描画する (paint() を呼ぶ ) ); public void paint(graphics g) { // 枠線を描く // pos[][] に従って描画する pos[][] が 0 のとき,1 のとき,2 のとき \
前回の課題 (3) 配列 pos[][] はその座標と表示する記号 \ を保持するために利用される pos[0][0] 前々回の課題と同様に,pos[][] の剰余が0なら,1なら,2なら \ を表すものとする マウスがクリックされたとき, その座標に対応するpop[][] を増やし, 再描画する 座標は, x = me.getx(); y = me.gety(); で得られるので, その座標から配列 pop[][] の添字になるよう対応をとる 1 [0][0] は0 x 49, 0 y 49, [1][0] は50 x 99, 0 y 49,... 2 x,y を直接演算して添え字にする pos[5][0] pos[5][3]
ウインドウ部品を用いる
ウインドウ部品の追加 Appletクラスを継承したクラスに部品を追加する場合,addメソッドを利用する 代表的な部品として, ラベル Label ボタン Button テキストフィールド TextField チェックボックス Checkbox ラジオボタン CheckboxGroup キャンバス Canvas リスト List チョイス Choice
ラベル ウインドウ内に文字列を部品として配置する際,Labelクラスを用いる Labelクラスの使い方 Label lb1 = new Label("abcd"); // オブジェクトの生成 add(lb1); // add メソッドで部品配置 上記の例では, オブジェクト生成時に文字列を指定していたが, 後から指定するときには,setText メソッドを利用し, オブジェクトの文字列を取得するときには gettext メソッドを利用する Label lb1 = new Label(" "); // 長めの文字列で初期化 lb1.settext(ss); // ss を文字列に指定 add(lb1); // add メソッドで部品配置
ボタン (1) Button クラスを用いる ボタンはそれが押されたことを検知する必要があるので, イベントリスナを利用する クラス Button リスナ登録 addactionlistener() インタフェース ActionListener 呼び出しメソッド actionperformed(actionevent e) Button クラスの使い方 public class JaBtn1 extends Applet implements ActionListener { Button bt1; public void init () { Button bt1 = new Button("button-1"); bt1.addactionlistener(this); add(bt1);... public void actionperformed(actionevent e) { Button bt = (Button) e.getsource(); // どのボタンが押されたかを知る // 仕事を記述
ボタン (2) import java.applet.applet; import java.awt.*; import java.awt.event.*; public class JaBtn1 extends Applet implements ActionListener { Label lb1; Button bt1, bt2; public void init() { bt1 = new Button(" 表示 "); bt1.addactionlistener(this); add(bt1); bt2 = new Button(" 消去 "); bt2.addactionlistener(this); add(bt2); lb1 = new Label(" 初期状態です "); add(lb1); public void actionperformed(actionevent e) { Button bt = (Button)e.getSource(); if (bt == bt1) lb1.settext("abcdefg"); // 押されたボタンが bt1 if (bt == bt2) lb1.settext(""); // 押されたボタンが bt2
テキストフィールド (1) テキストフィールドは 1 行入力用の部品 クラス TextField リスナ登録 addactionlistener() インタフェース ActionListener 呼び出しメソッド actionperformed(actionevent e) テキストフィールドの使い方 public class JaTxtfd1 extends Applet implements ActionListener { TextField txt1; public void init () { TextField txt1 = new TxtField(20); // 20 文字の幅をとっておく txt1.addactionlistener(this); // リスナ登録 add(txt1); // 部品を追加... public void actionperformed(actionevent e) { // 仕事を記述
テキストフィールド (2) // import 文はボタンの例と同じ public class JaTxtFd1 extends Applet implements ActionListener { TextField txt1, txt2; Button btn1; public void init() { txt1 = new TextField(20); // 20 文字分の幅に設定 txt1.addactionlistener(this); // txt1 はイベント処理をする add(txt1); // 登録する txt2 = new TextField(20); // txt2 の設定 add(txt2); btn1 = new Button(" コピー text2 text1"); // ボタンの設定 btn1.addactionlistener(this); // ボタンのイベント処理 add(btn1); // ボタンの登録 public void actionperformed(actionevent e) { String ss; if (e.getsource() == txt1) { // txt1 で Enter 入力あり ss = txt1.gettext(); // txt1 txt2 とコピー txt2.settext(ss); else if (e.getsource() == btn1) { // ボタンクリックあり ss = txt2.gettext(); // txt2 txt1 とコピー txt1.settext(ss);
チェックボックス (1) チェックボックスは項目を有効 無効にする時に使用される クラス Checkbox リスナ登録 additemlistener インタフェース ItemListener 呼び出しメソッド itemstatechanged(itemevent e) チェックボックスの使い方 public class JaChkBx1 extends Applet implements ItemListener { Checkbox cbx1; public void init () { cbx1 = new Checkbox("Red"); cbx1.additemlistener(this); add(cbx1);... public void ItemStateChanged(ItemEvent e) { // 仕事を記述
// import は前と同じ public class JaChkBx1 extends Applet implements ItemListener { Checkbox cbx1, cbx2, cbx3; チェックボックス boolean b1, b2, b3; (2) int nbr = 0; public void init() { cbx1 = new Checkbox("ChkBox1"); cbx1.additemlistener(this); add(cbx1); cbx2 = new Checkbox("ChkBox2"); cbx2.additemlistener(this); add(cbx2); cbx3 = new Checkbox("ChkBox3"); cbx3.additemlistener(this); add(cbx3); public void itemstatechanged(itemevent e) { if (e.getitemselectable() == cbx1) nbr = 1; if (e.getitemselectable() == cbx2) nbr = 2; if (e.getitemselectable() == cbx3) nbr = 3; b1 = cbx1.getstate(); b2 = cbx2.getstate(); b3 = cbx3.getstate(); repaint(); public void paint(graphics g) { if (nbr!= 0) { g.drawstring(" 最新の操作は ChkBox" + nbr, 10, 50); g.drawstring(" 現在の状態は " + b1 + " " + b2 + " " + b3, 10, 80);
チェックボックスグループ (1) チェックボックスは複数の項目を選択できる しかし, 複数のチェックボックスのうち一つだけが選択できる方が便利な場合もある これを実現するのがチェックボックスグループ ( 通常ラジオボタン ) である クラス CheckboxGroup リスナ登録 additemlistener インタフェース ItemListener 呼び出しメソッド itemstatechanged(itemevent e) チェックボックスの形状は であるが, チェックボックスグループでは である
チェックボックスグループ (2) //import は同じ public class JaRadio1 extends Applet implements ItemListener { CheckboxGroup grp1; Checkbox cbx1, cbx2, cbx3; int red = 255, green = 0, blue = 0; public void init() { grp1 = new CheckboxGroup(); cbx1 = new Checkbox(" 赤色 ", true, grp1); cbx1.additemlistener(this); add(cbx1); cbx2 = new Checkbox(" 緑色 ", false, grp1); cbx2.additemlistener(this); add(cbx2); cbx3 = new Checkbox(" 青色 ", false, grp1); cbx3.additemlistener(this); add(cbx3); public void itemstatechanged(itemevent e) { red = green = blue = 0; if (cbx1.getstate() == true) red = 255; if (cbx2.getstate() == true) green = 255; if (cbx3.getstate() == true) blue = 255; repaint(); public void paint(graphics g) { g.setcolor(new Color(red, green, blue)); // 色設定 g.fillrect(30, 40, 180, 50); // 塗り潰し四角形
課題 (1) ( 赤, 緑, 青 ) と ( 円, 四角, 直線 ) の 2 つのチェックボックスグループを作り, チェックボックスグループで指定された図形を表示ボタンを押したときに (100,50) の座標から (100,100) の大きさで各プログラムを作成しなさい
import java.applet.applet; import java.awt.*; import java.awt.event.*; /* <APPLET CODE="JaCbxKadai.class" WIDTH=500 HEIGHT=200> </APPLET> */ public class JaCbxKadai extends Applet implements ItemListener, ActionListener { 課題 CheckboxGroup (2) color, shape; Checkbox c1, c2, c3; Checkbox s1, s2, s3; Button bt1, bt2; int nclr = 1, nshp = 1; boolean disp = false; //trueの時描画するための変数 public void init() { // 色に対するチェックボックスグループを指定する // 形状に対するチェックボックスグループを指定する // ボタンを登録する public void itemstatechanged(itemevent e) { // 色のチェックボックスの状態をnclrに入れる // 形状のチェックボックスの状態をnshpに入れる public void actionperformed(actionevent e) { Button bt = (Button) e.getsource(); if (bt == bt1) disp = true; if (bt == bt2) disp = false; repaint(); public void paint(graphics g) { if (disp) { // nclr の値により現在色を変更する // nshp の値により指定の図形を描画する disp = false; else { g.clearrect(100,50,100,100);