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 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();
}
}
ผลลัพธ์
