Xử lý sự kiện AWT

Sự kiện là gì?

Sự thay đổi trong trạng thái của một đối tượng được gọi là sự kiện tức là sự kiện mô tả sự thay đổi trong trạng thái của nguồn. Sự kiện được tạo ra do tương tác của người dùng với các thành phần giao diện người dùng đồ họa. Ví dụ, nhấp vào một nút, di chuyển chuột, nhập một ký tự thông qua bàn phím, chọn một mục từ danh sách, cuộn trang là những hoạt động khiến một sự kiện xảy ra.

Các loại sự kiện

Các sự kiện có thể được phân loại rộng rãi thành hai loại:

  • Foreground Events- Những sự kiện yêu cầu sự tương tác trực tiếp của người dùng. Chúng được tạo ra do hậu quả của việc một người tương tác với các thành phần đồ họa trong Giao diện người dùng đồ họa. Ví dụ: nhấp vào một nút, di chuyển chuột, nhập ký tự thông qua bàn phím, chọn một mục từ danh sách, cuộn trang, v.v.

  • Background Events- Những sự kiện yêu cầu sự tương tác của người dùng cuối được gọi là sự kiện nền. Hệ điều hành bị gián đoạn, lỗi phần cứng hoặc phần mềm, bộ đếm thời gian hết hạn, hoạt động hoàn thành là ví dụ về các sự kiện nền.

Xử lý sự kiện là gì?

Xử lý sự kiện là cơ chế kiểm soát sự kiện và quyết định điều gì sẽ xảy ra nếu sự kiện xảy ra. Cơ chế này có mã được gọi là trình xử lý sự kiện được thực thi khi một sự kiện xảy ra. Java Sử dụng Mô hình Sự kiện Ủy quyền để xử lý các sự kiện. Mô hình này xác định cơ chế chuẩn để tạo và xử lý các sự kiện. Chúng ta hãy giới thiệu ngắn gọn về mô hình này.

Mô hình sự kiện ủy quyền có những người tham gia chính sau đây, cụ thể là:

  • Source- Nguồn là một đối tượng mà sự kiện xảy ra trên đó. Nguồn chịu trách nhiệm cung cấp thông tin về sự kiện đã xảy ra cho người xử lý của nó. Java cung cấp như với các lớp cho đối tượng nguồn.

  • Listener- Nó còn được gọi là trình xử lý sự kiện.Listener chịu trách nhiệm tạo phản hồi cho một sự kiện. Từ quan điểm thực thi java, người nghe cũng là một đối tượng. Người nghe đợi cho đến khi nhận được một sự kiện. Sau khi sự kiện được nhận, trình nghe xử lý sự kiện sau đó trả về.

Lợi ích của cách tiếp cận này là logic giao diện người dùng được tách biệt hoàn toàn khỏi logic tạo ra sự kiện. Phần tử giao diện người dùng có thể ủy quyền việc xử lý một sự kiện cho đoạn mã riêng biệt. Trong mô hình này, Listener cần được đăng ký với đối tượng nguồn để người nghe có thể nhận được thông báo sự kiện. Đây là một cách hiệu quả để xử lý sự kiện vì thông báo sự kiện chỉ được gửi đến những người nghe muốn nhận chúng.

Các bước liên quan đến xử lý sự kiện

  • Người dùng nhấp vào nút và sự kiện được tạo.

  • Bây giờ đối tượng của lớp sự kiện có liên quan được tạo tự động và thông tin về nguồn và sự kiện được phổ biến trong cùng một đối tượng.

  • Đối tượng sự kiện được chuyển tiếp đến phương thức của lớp trình nghe đã đăng ký.

  • phương thức bây giờ được thực thi và trả về.

Những điểm cần nhớ về người nghe

  • Để thiết kế một lớp trình xử lý, chúng ta phải phát triển một số giao diện trình xử lý. Các giao diện trình xử lý này dự báo một số phương thức gọi lại trừu tượng công khai phải được thực hiện bởi lớp trình nghe.

  • Nếu bạn không triển khai bất kỳ nếu các giao diện được xác định trước thì lớp của bạn không thể hoạt động như một lớp lắng nghe cho một đối tượng nguồn.

Phương thức gọi lại

Đây là các phương thức được cung cấp bởi nhà cung cấp API và được định nghĩa bởi người lập trình ứng dụng và được nhà phát triển ứng dụng gọi ra. Ở đây các phương thức gọi lại đại diện cho một phương thức sự kiện. Đáp lại một sự kiện java jre sẽ kích hoạt phương thức gọi lại. Tất cả các phương thức gọi lại như vậy được cung cấp trong giao diện người nghe.

Nếu một thành phần muốn một số người nghe sẽ lắng nghe các sự kiện của nó thì nguồn đó phải tự đăng ký cho người nghe.

Ví dụ về xử lý sự kiện

Tạo chương trình java sau bằng cách sử dụng bất kỳ trình soạn thảo nào bạn chọn D:/ > AWT > com > tutorialspoint > gui >

AwtControlDemo.java
package com.tutorialspoint.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.");
         }  	
      }		
   }
}

Biên dịch chương trình bằng dấu nhắc lệnh. Đi đếnD:/ > AWT và gõ lệnh sau.

D:\AWT>javac com\tutorialspoint\gui\AwtControlDemo.java

Nếu không có lỗi xảy ra nghĩa là biên dịch thành công. Chạy chương trình bằng lệnh sau.

D:\AWT>java com.tutorialspoint.gui.AwtControlDemo

Xác minh kết quả sau