Program 13 : Event Handling
Create a Java program to handle various types of events using the Delegation Event Model, including implementing event listener interfaces and adapter classes. Demonstrate event handling mechanisms with key and action events.
A) Handling Key and Action Events
This example demonstrates handling events by directly implementing listener interfaces (KeyListener
, ActionListener
). The WindowAdapter
is used for a concise way to handle the window closing event.
EventDemo.java
java
import java.awt.*;
import java.awt.event.*;
// AWT Frame with KeyListener and ActionListener
public class EventDemo extends Frame implements KeyListener, ActionListener {
TextField tf;
TextArea ta;
public EventDemo() {
setLayout(new FlowLayout());
// Frame setup
setSize(300, 300);
setTitle("Key and Action Event Demo");
setVisible(true);
// Setup layout and components
tf = new TextField(20);
ta = new TextArea(10, 25);
ta.setEditable(false); // Make text area read-only
Button b = new Button("Clear");
// Add components to the frame
add(new Label("Enter Text:"));
add(tf);
add(new Label("Event Log:"));
add(ta);
add(b);
// Register listeners to components
tf.addKeyListener(this);
b.addActionListener(this);
// Window listener to handle closing event using an adapter class
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
}
// -- KeyListener methods --
@Override
public void keyPressed(KeyEvent ke) {
ta.append("Key Pressed: " + ke.getKeyChar() + "\n");
}
@Override
public void keyReleased(KeyEvent ke) {
// Not used in this demo
}
@Override
public void keyTyped(KeyEvent ke) {
// Not used in this demo
}
// -- ActionListener method --
@Override
public void actionPerformed(ActionEvent ae) {
if (ae.getActionCommand().equals("Clear")) {
ta.setText("");
tf.setText("");
}
}
public static void main(String[] args) {
new EventDemo();
}
}
B) Using Adapter Classes
This example demonstrates adapter classes, which provide empty implementations of all methods in an event listener interface. This allows you to override only the methods you need, resulting in cleaner code.
AdapterDemo.java
java
import java.awt.*;
import java.awt.event.*;
public class AdapterDemo extends Frame {
Label statusLabel;
public AdapterDemo() {
// --- 1. Frame Setup ---
setLayout(new FlowLayout());
setTitle("Adapter Class Demo");
setSize(400, 200);
setVisible(true);
// --- 2. Component Setup ---
statusLabel = new Label("No event yet.");
add(statusLabel);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
// Use MouseAdapter to handle mouse events.
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent me) {
statusLabel.setText("Mouse clicked at: ("
+ me.getX() + ", " + me.getY() + ")");
}
@Override
public void mouseEntered(MouseEvent me) {
statusLabel.setText("Mouse entered the window.");
}
@Override
public void mouseExited(MouseEvent me) {
statusLabel.setText("Mouse left the window.");
}
});
}
public static void main(String[] args) {
new AdapterDemo();
}
}
Longer Version
java
import java.awt.*;
import java.awt.event.*;
public class AdapterDemo extends Frame {
public AdapterDemo() {
setTitle("Adapter Demo");
setSize(400, 200);
// Add mouse listeners using our custom adapter classes
addMouseListener(new MyMouseAdapter(this));
addMouseMotionListener(new MyMouseMotionAdapter(this));
// Use the standard WindowAdapter to handle closing the window
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
setVisible(true);
}
// A method to display status messages in the frame's title bar
public void showStatus(String msg) {
setTitle(msg);
}
public static void main(String[] args) {
new AdapterDemo();
}
}
// Custom adapter class for mouse click events
class MyMouseAdapter extends MouseAdapter {
AdapterDemo adapterDemo;
public MyMouseAdapter(AdapterDemo adapterDemo) {
this.adapterDemo = adapterDemo;
}
// We only override the method we need: mouseClicked()
@Override
public void mouseClicked(MouseEvent me) {
adapterDemo.showStatus("Mouse clicked at ("
+ me.getX() + ", " + me.getY() + ")");
}
}
// Custom adapter class for mouse motion events
class MyMouseMotionAdapter extends MouseMotionAdapter {
AdapterDemo adapterDemo;
public MyMouseMotionAdapter(AdapterDemo adapterDemo) {
this.adapterDemo = adapterDemo;
}
// We only override the method we need: mouseDragged()
@Override
public void mouseDragged(MouseEvent me) {
adapterDemo.showStatus("Mouse dragged at ("
+ me.getX() + ", " + me.getY() + ")");
}
}