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