Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

อะไรคือความแตกต่างระหว่างอินเตอร์เฟสตัวฟังเหตุการณ์และคลาสอะแด็ปเตอร์เหตุการณ์ใน Java?


An EventListener อินเทอร์เฟซกำหนดวิธีการที่ต้องใช้โดยตัวจัดการเหตุการณ์สำหรับเหตุการณ์บางประเภทในขณะที่ เหตุการณ์ อะแดปเตอร์ คลาสจัดเตรียมการใช้งานเริ่มต้นของ EventListener อินเทอร์เฟซ

ตัวฟังเหตุการณ์

  • The เหตุการณ์ ผู้ฟัง เป็นแกนหลักของทุกองค์ประกอบในการจัดการเหตุการณ์
  • ทุกวิธีของ EventListener จะมีพารามิเตอร์ตัวเดียวเป็นอินสแตนซ์ซึ่งเป็นคลาสย่อยของ EventObject คลาส.
  • An EventListener จำเป็นต้องขยายอินเทอร์เฟซและจะกำหนดเป็น j ava.util แพ็คเกจ
  • บางส่วน EventListener อินเทอร์เฟซคือ ActionListener , KeyListener , MouseListener , FocusListener , ItemListener และอื่นๆ

ตัวอย่าง

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class KeyListenerTest implements KeyListener, ActionListener {
   JFrame frame;
   JTextField tf;
   JLabel lbl;
   JButton btn;
   public KeyListenerTest() {
      frame = new JFrame();
      lbl = new JLabel();
      tf = new JTextField(15);
      tf.addKeyListener(this);
      btn = new JButton("Clear");
      btn.addActionListener(this);
      JPanel panel = new JPanel();
      panel.add(tf);
      panel.add(btn);
      frame.setLayout(new BorderLayout());
      frame.add(lbl, BorderLayout.NORTH);
      frame.add(panel, BorderLayout.SOUTH);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setLocationRelativeTo(null);
      frame.setSize(300, 200);
      frame.setVisible(true);
   }
   @Override
   public void keyTyped(KeyEvent ke) {
      lbl.setText("You have typed "+ ke.getKeyChar());
   }
   @Override
   public void keyPressed(KeyEvent ke) {
      lbl.setText("You have pressed "+ ke.getKeyChar());
   }
   @Override
   public void keyReleased(KeyEvent ke) {
      lbl.setText("You have released "+ ke.getKeyChar());
   }
   @Override
   public void actionPerformed(ActionEvent ae) {
      tf.setText("");
   }
   public static void main(String args[]) {
      new KeyListenerTest();
   }
}

ผลลัพธ์

อะไรคือความแตกต่างระหว่างอินเตอร์เฟสตัวฟังเหตุการณ์และคลาสอะแด็ปเตอร์เหตุการณ์ใน Java?

ตัวปรับต่อเหตุการณ์

  • คลาสนามธรรมสามารถเรียกได้ว่าเป็น เหตุการณ์ อะแดปเตอร์ เพื่อรับงานต่างๆ
  • An เหตุการณ์ อะแดปเตอร์ class ให้การใช้งานเริ่มต้นของวิธีการทั้งหมดใน EventListener อินเทอร์เฟซ
  • คลาส Event Adapter ไม่กี่คลาสคือ FocusAdapter , KeyAdapter , MouseAdapter , ตัวปรับต่อหน้าต่าง และอื่นๆ

ตัวอย่าง

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class KeyAdapterTest {
   private JFrame frame;
   private JLabel headLabel;
   private JLabel msgLabel;
   private JPanel controlPanel;
   public KeyAdapterTest() {
      initializeUI();
   }
   private void initializeUI() {
      frame = new JFrame("KeyAdapter class");
      frame.setSize(350, 275);
      frame.setLayout(new GridLayout(3, 1));
      headLabel = new JLabel("", JLabel.CENTER);
      msgLabel = new JLabel("", JLabel.CENTER);
      msgLabel.setSize(300, 100);
      frame.addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent windowEvent) {
            System.exit(0);
         }
      });
      controlPanel = new JPanel();
      controlPanel.setLayout(new FlowLayout());
      frame.add(headLabel);
      frame.add(controlPanel);
      frame.add(msgLabel);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }
   private void showMouseApapter() {
      headLabel.setText("KeyAdapter Test");
      final JTextField textField = new JTextField(10);
      JButton displayButton = new JButton("Display");
      displayButton.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            msgLabel.setText("You entered : " + textField.getText());
         }
      });
      textField.addKeyListener(new KeyAdapter() {
         public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) {
               msgLabel.setText("You entered : " + textField.getText());
            }
         }
      });
      controlPanel.add(textField);
      controlPanel.add(displayButton);
      frame.setVisible(true);
   }
   public static void main(String[] args) {
      KeyAdapterTest test = new KeyAdapterTest();
      test.showMouseApapter();
   }
}

ผลลัพธ์

อะไรคือความแตกต่างระหว่างอินเตอร์เฟสตัวฟังเหตุการณ์และคลาสอะแด็ปเตอร์เหตุการณ์ใน Java?