Awt-event-handling
AWTイベント処理
イベントとは何ですか?
オブジェクトの状態の変化は、イベントとして知られています。 イベントは、ソースの状態の変化を説明します。 イベントは、グラフィカルユーザーインターフェイスコンポーネントとのユーザーインタラクションの結果として生成されます。 たとえば、ボタンをクリックする、マウスを動かす、キーボードから文字を入力する、リストから項目を選択する、ページをスクロールするなどのイベントが発生します。
イベントの種類
イベントは大きく2つのカテゴリに分類できます。
- 前景イベント-ユーザーの直接的な対話を必要とするイベント。これらは、ユーザーがグラフィカルユーザーインターフェイスのグラフィカルコンポーネントと対話した結果として生成されます。 たとえば、ボタンをクリックする、マウスを動かす、キーボードから文字を入力する、リストから項目を選択する、ページをスクロールするなど
- バックグラウンドイベント-エンドユーザーの操作を必要とするイベントは、バックグラウンドイベントと呼ばれます。 バックグラウンドイベントの例は、オペレーティングシステムの割り込み、ハードウェアまたはソフトウェアの障害、タイマーの期限切れ、操作の完了です。
イベント処理とは何ですか?
イベント処理は、イベントを制御し、イベントが発生した場合の動作を決定するメカニズムです。 このメカニズムには、イベントが発生したときに実行されるイベントハンドラーと呼ばれるコードがあります。 Javaは、委任イベントモデルを使用してイベントを処理します。 このモデルは、イベントを生成および処理するための標準メカニズムを定義します。このモデルについて簡単に紹介します。
委任イベントモデルには、以下の主要な参加者がいます。
- ソース-ソースは、イベントが発生するオブジェクトです。 ソースは、発生したイベントの情報をハンドラーに提供する責任があります。 Javaは、ソースオブジェクトのクラスと同様に提供します。
- リスナー-イベントハンドラーとも呼ばれます。リスナーはイベントへの応答を生成します。 Java実装の観点から見ると、リスナーはオブジェクトでもあります。 リスナーは、イベントを受信するまで待機します。 イベントが受信されると、リスナーはイベントを処理してから戻ります。
このアプローチの利点は、ユーザーインターフェイスロジックがイベントを生成するロジックから完全に分離されることです。 ユーザーインターフェイス要素は、イベントの処理を別のコードに委任できます。 このモデルでは、リスナーがイベント通知を受信できるように、リスナーをソースオブジェクトに登録する必要があります。 イベント通知は受信したいリスナーにのみ送信されるため、これはイベントを処理する効率的な方法です。
イベント処理に関係するステップ
- ユーザーがボタンをクリックすると、イベントが生成されます。
- これで、関係するイベントクラスのオブジェクトが自動的に作成され、ソースとイベントに関する情報が同じオブジェクトに入力されます。
- イベントオブジェクトは、登録されたリスナークラスのメソッドに転送されます。
- メソッドが実行されて戻ります。
リスナーについて覚えておくべきポイント
- リスナークラスを設計するには、いくつかのリスナーインターフェイスを開発する必要があります。これらのリスナーインターフェイスは、リスナークラスによって実装する必要があるいくつかのパブリック抽象コールバックメソッドを予測します。
- 定義済みのインターフェイスにifを実装しない場合、クラスはソースオブジェクトのリスナークラスとして機能できません。
コールバックメソッド
これらは、APIプロバイダーによって提供され、アプリケーションプログラマーによって定義され、アプリケーション開発者によって呼び出されるメソッドです。 ここで、コールバックメソッドはイベントメソッドを表します。 イベントに応答して、java jreはコールバックメソッドを起動します。 このようなコールバックメソッドはすべて、リスナーインターフェイスで提供されます。
コンポーネントがリスナーにイベントをリッスンさせたい場合、ソースはそれ自体をリスナーに登録する必要があります。
イベント処理の例
たとえば、 D:/> AWT> com> finddevguides> gui> の任意のエディターを使用して、次のJavaプログラムを作成します。
AwtControlDemo.java
package com.finddevguides.gui;
import java.awt.*;
import java.awt.event.*;
public class AwtControlDemo {
private Frame mainFrame;
private Label headerLabel;
private Label statusLabel;
private Panel controlPanel;
public AwtControlDemo(){
prepareGUI();
}
public static void main(String[] args){
AwtControlDemo awtControlDemo = new AwtControlDemo();
awtControlDemo.showEventDemo();
}
private void prepareGUI(){
mainFrame = new Frame("Java AWT Examples");
mainFrame.setSize(400,400);
mainFrame.setLayout(new GridLayout(3, 1));
mainFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent){
System.exit(0);
}
});
headerLabel = new Label();
headerLabel.setAlignment(Label.CENTER);
statusLabel = new Label();
statusLabel.setAlignment(Label.CENTER);
statusLabel.setSize(350,100);
controlPanel = new Panel();
controlPanel.setLayout(new FlowLayout());
mainFrame.add(headerLabel);
mainFrame.add(controlPanel);
mainFrame.add(statusLabel);
mainFrame.setVisible(true);
}
private void showEventDemo(){
headerLabel.setText("Control in action: Button");
Button okButton = new Button("OK");
Button submitButton = new Button("Submit");
Button cancelButton = new Button("Cancel");
okButton.setActionCommand("OK");
submitButton.setActionCommand("Submit");
cancelButton.setActionCommand("Cancel");
okButton.addActionListener(new ButtonClickListener());
submitButton.addActionListener(new ButtonClickListener());
cancelButton.addActionListener(new ButtonClickListener());
controlPanel.add(okButton);
controlPanel.add(submitButton);
controlPanel.add(cancelButton);
mainFrame.setVisible(true);
}
private class ButtonClickListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if( command.equals( "OK" )) {
statusLabel.setText("Ok Button clicked.");
}
else if( command.equals( "Submit" ) ) {
statusLabel.setText("Submit Button clicked.");
}
else {
statusLabel.setText("Cancel Button clicked.");
}
}
}
}
コマンドプロンプトを使用してプログラムをコンパイルします。 D:/> AWT に移動し、次のコマンドを入力します。
D:\AWT>javac com\finddevguides\gui\AwtControlDemo.java
エラーが発生しない場合は、コンパイルが成功したことを意味します。 次のコマンドを使用してプログラムを実行します。
D:\AWT>java com.finddevguides.gui.AwtControlDemo
次の出力を確認します