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

ความแตกต่างระหว่าง Event Listener Interface และ Event Adapter Class ใน Java

EventListener interface กำหนดเมธอดที่ Event Handler ต้อง implement สำหรับเหตุการณ์ประเภทใดประเภทหนึ่ง ในขณะที่ Event Adapter class ให้การ implement เริ่มต้น (default implementation) ของ EventListener interface

Event Listener

  • Event Listeners เป็นโครงสร้างหลักของทุกคอมโพเนนต์ในการจัดการเหตุการณ์
  • ทุกเมธอดของ EventListener จะมีพารามิเตอร์เดียว เป็นอินสแตนซ์ของคลาสย่อยของ EventObject
  • EventListener interface ต้อง extend และอยู่ใน package java.util
  • EventListener interface ตัวอย่าง: ActionListener, KeyListener, MouseListener, FocusListener, ItemListener

ตัวอย่าง KeyListener

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();
    }
}

ผลลัพธ์

ความแตกต่างระหว่าง Event Listener Interface และ Event Adapter Class ใน Java

Event Adapter

  • คลาส Abstract เรียกว่า Event Adapter สำหรับรับเหตุการณ์ต่างๆ
  • Event Adapter class ให้ default implementation ของทุกเมธอดใน EventListener interface
  • Event Adapter class ตัวอย่าง: FocusAdapter, KeyAdapter, MouseAdapter, WindowAdapter

ตัวอย่าง KeyAdapter

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();
    }
}

ผลลัพธ์

ความแตกต่างระหว่าง Event Listener Interface และ Event Adapter Class ใน Java