Java 中事件監聽器介面和事件介面卡類有什麼區別?
一個**EventListener**介面定義了特定事件的事件處理程式必須實現的方法,而一個**Event Adapter**類則提供了**EventListener**介面的預設實現。
事件監聽器
- **事件監聽器**是每個元件處理事件的支柱。
- 特定**EventListener**的每個方法都將有一個引數作為例項,該例項是**EventObject**類的子類。
- **EventListener**介面需要被擴充套件,並且它將在**java.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();
}
}輸出
事件介面卡
- 抽象類可以被稱為**事件介面卡**來接收各種事件。
- 一個**事件介面卡**類提供了**EventListener**介面中所有方法的預設實現。
- 一些事件介面卡類有**FocusAdapter**、**KeyAdapter**、**MouseAdapter**、**WindowAdapter**等等。
示例
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
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP