JAVA入門後期④ イベント、AWT、の基本構造、スレッド
イベント処理 イベント処理 これまでの処理は、データ表示など。 マウスクリックなどの場合、何らかの処理が起 こります。 (1)マウスクリックの信号が発生 (2)システムが「信号」を受け取ると、メソッドが実行される。 この「信号」をイベントという。 操作→イベント発生、イベント判断→メソッド実行 これらを「イベント処理」という。
イベント処理 1.マウスのイベント(表示) mouseEnterd・・・マウスが入ってきたとき mouseExited・・・マウスが出て行ったとき mousePressed・・・マウスボタン押下時 mouseReleased・・・マウスボタン放したとき 2.イベントリスナの登録 イベント処理ができるようになるにはイベントリ スナの登録が必要 addMouseListener(this); ーthisをマウスのイベントリスナとして登録。 thisは「このクラスそのもの」を表示
イベント処理 3.イベントリスナの削除 4.イベント対応メソッドの実装 イベント機能を削除したい場合、remove系を用いる。 removeMouseListener(this); 4.イベント対応メソッドの実装 イベント対応のインターフェイスの実装 public class クラス名 extends Applet imlements MouseListener { 5.マウスクリックの実装の記述 public void mouseClicked(MouseEvent e){ x=e.getx(); y=e.gety(); repaint(); }
イベント処理 (MouseEvent e)は、マウスクリックされたとき 収集されたイベント情報。 2.mouseClicked()呼び出し→ MouseEventオブジェクト引数渡し。 mouseClicked()はマウスクリック座標などを知ることができる。
import java.applet.Applet; import java.awt.*; import java.awt.event.*; /* <applet code = "EventTest05.class" width = 300 height = 200></applet> */ public class EventTest05 extends Applet implements MouseListener{ String s1 = "", s2 = ""; int x = -1, y; public void init(){ addMouseListener(this); } public void paint(Graphics g){ g.drawString(s1, 10, 10); g.drawString(s2, 10, 20); Java.awtとJava.awt.eventは 異なるものなので両者が必要 MouseListenerインターフェイスの実装 イベント取得準備
public void mouseEntered(MouseEvent m){ s1 = "mouseEntered"; if(x != -1){ g.drawLine(x-10, y, x+10, y); g.drawLine(x, y-10, x, y+10); } public void mouseEntered(MouseEvent m){ s1 = "mouseEntered"; repaint(); public void mouseExited(MouseEvent m){ s1 = "mouseExited"; マウスのイベント によるメソッド
public void mouseClicked(MouseEvent m){ x = m.getX(); y = m.getY(); repaint(); } public void mousePressed(MouseEvent e){ s2 = "mousePressed"; public void mouseReleased(MouseEvent e){ s2 = "mouseReleased";
AWT AWTにつきまして 1.AWT (Abstract Windowing Tools)は、Java で GUIアプリケーションを作成するためのクラスライブラリです。現在では Swing もよく利用されていますが、Swing よりも軽い GUIアプリケーションを作成することが可能です。 2. AWTにはボタン、ラベル、数種類のコンポーネントが用意されています。ラベル、ボタンにはGIF、JPEGなどのイメージが表示されません。
AWT AWTコンポーネント 「java.awt」、 「java.awt.event.*」をインポート ントに関するパッケージで、両者は異なる性質 なので別々にインポートする必要がある。 主なコンポーネントは次頁。
AWTコンポーネント クラス 機能 Button ボタン Label ラベル TextField TextArea テキスト・エリア テキスト・フィールド(単一行) TextArea テキスト・エリア Checkbox チェック・ボックス Choice 選択用ボックス Canvas キャンバス List リスト・ボックス Scrollbar スクロール・バー
ボタン( Button ) 3.ボタンオブジェクト生成(コンストラクタ) ボタン配置手順 ①オブジェクトの生成 Button btn1 = new Button([string label[]); ②配置 add(btn1); 別法1. Button btn1; btn1 = new Button(“ボタン1”); 別法2. add(btn1 = new Button(“ボタン1”));
ボタン( Button ) 重要なメソッドは次の通り イベント処理 キャプションの設定 void addActionListener(new ActionListener) 複数個ある場合の識別方法 イベントのオブジェクト名.getSource() キャプションの設定 void setLabel(String Label) キャプションの取得 String getLabel ()
ラベル(Label) Label([String text, int alignment]) Label.CENTER 中央揃え Label.RIGHT 右揃え Label.LEFT 左揃え ラベルをフレームに配置 ① Label lab1 = new Label(“ラベル1”, Label.CENTER); ② add(lab1); イベント処理 なし 複数個ある場合の識別方法 イベントのオブジェクト名.getSource() テキストの設定 void setText(String text) テキストの取得 String getText()
テキスト・フィールド(TextField) TextField(String text) TextField(String text, int columns) 注) columnsは、表示する文字の数(列数) テキスト・フィールドをフレームに配置 ① TextField txt1 = new Label(“名前”); ② add(txt1); イベント処理 void addActionListener(new ActionListener) 複数個ある場合の識別方法 イベントのオブジェクト名.getSource() テキストの設定 void setText(String text) テキストの取得 String getText()
AWTのイベント処理 ①「AWTコンポーネントのイベント」 ②「マウスとキーボードに対するイベント」 ①の詳細 イベント発生「ボタン」コンポーネントを、「イベント・ソー ス」という。このイベント・ソースに対して、「クリック」、 「ダブル・クリック」、「ドラッグ」などのイベントを発生さ せる。 実際のイベント処理を行うには以下の手順を踏みます。
AWTのイベント処理 1.import java.awt.event.*; 2.イベントソースをイベントリスナーに登録 3.イベントリスナーはボタンのとき、「ActionListner」、コンボ・ボックスは「ItemListner」となる。 4.実際のイベント処理は「イベント処理メソッド」で実行。それぞれのイベントに対応したメソッドはイベント・リスナーに用意されている。 5.イベント発生後、必要イベント処理が実行される。 ボタンのイベント処理はメソッドは「actionPerformed」
AWTのイベント処理 AWTの主なコンポーネントに必要なものは次の通り イベント・リスナー イベント名 イベント・メソッド Button、TextFied、List ActionListener ActionEvent actionPerformed Checkbox, Choice ItemListner ItemEvent itemStateChanged Scrollbar AdjustmentListener AdjustmentEvent adjustementValueChanged この他の「Label」「TextArea」「Canvas」のイベント処理 は設定不可。
AWTのイベント処理 イベントリスナー登録方法① 例. Button btn1 = new Button("ボタン1 "); Btn1.addActionListner( new ActionListener() { public void actionperformer(ActionEvent e) ボタン1クリック処理 } }); Btn1.setBounds(50, 50, 50, 50); Add(btn1);
AWTのイベント処理 イベントリスナー登録方法② ②イベントリスナーがインターフェイスとして定義されているので、このイベントリスナーのインターフェイスを実装(implements)する方法 ②はコンポーネントの数が多い時に使われる。 実装(implements)する方法の手順 [1]イベント・リスナーのインターフェイスを実装(implements)する。 [2]コンポーネントにイベント・リスナーを登録する。 [3]イベント・メソッドで、イベントが発生したときの処理をする。 コンポーネント数複数のときは、 if(イベント・オブジェクト.getSource() == コンポーネントのオブジェクト) で各コンポーネントを識別。
例2 public class eg2 extends Applet implements ActionListener { eg2() setLayout(null); Button btn1 = new Button("ボタン1"); btn1.setBounds(50, 50, 50, 50); btn1.addActionListener(this); Button btn2 = new Button(“ボタン2”); btn2.setBounds(50, 150, 50, 50); btn2.addActionListener(this); add(btn1); add(btn2);
public void actionPerformed(ActionEvent e) { if(e.getSource() == btn1) ボタン1の処理 } else ボタン2の処理 } }
import java.applet.Applet; import java.awt.Button; 例3. import java.applet.Applet; import java.awt.Button; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class SampleAWT1 extends Applet implements ActionListener{ Button bt; public void init() { bt=new Button("Strat"); add(bt); bt.addActionListener(this); } public void actionPerformed(ActionEvent ae){ bt.setLabel("Stop"); ボタンオブジェクト生成 ボタン押下時、イベント取得準備 ボタン押下時処理
アプレットでのスレッドの使用 Javaは複数のスレッドを起動させることができ ます。スレッドはアプレットの中でも使用できます。 メインとは関係なく、自立的に動作するアニメーシ ョンなどを作ることができます。 1.アプレットでは表示はpaint()が行うので、これと関連させます。 2.別スレッドでは変数の値の変化などを与えます。 3.表示はpaint()に任せます。 例 AppletTest08参照。