Skip to content

Program 13 : Event Handling

1. EventDemo Converted to Swing

java
import javax.swing.*;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

// Swing JFrame with KeyListener and ActionListener
public class SwingEventDemo extends JFrame implements KeyListener, ActionListener {
    JTextField tf;
    JTextArea ta;

    public SwingEventDemo() {
        // --- 1. Frame Setup ---
        setLayout(new FlowLayout());
        setSize(350, 350);
        setTitle("Swing Key and Action Event Demo");
        
        // to handle closing a Swing window.
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // --- 2. Component Setup (using Swing components) ---
        tf = new JTextField(20);
        ta = new JTextArea(10, 25);
        ta.setEditable(false); // Make text area read-only
        JButton b = new JButton("Clear");

        // Add components to the frame's content pane
        add(new JLabel("Enter Text:"));
        add(tf);
        add(new JLabel("Event Log:"));
        // JTextArea needs to be put inside a JScrollPane to get scrollbars
        add(new JScrollPane(ta));
        add(b);

        // --- 3. Register listeners to components ---
        tf.addKeyListener(this);
        b.addActionListener(this);
        
        // --- 4. Make the frame visible ---
        setVisible(true);
    }

    // -- KeyListener methods --
    @Override
    public void keyPressed(KeyEvent ke) {
        ta.append("Key Pressed: " 
	        + ke.getKeyChar() + "\n");
    }

    @Override
    public void keyReleased(KeyEvent ke) {
        // Not used
    }
    
    @Override
    public void keyTyped(KeyEvent ke) {
        // Not used
    }

    // -- ActionListener method --
    @Override
    public void actionPerformed(ActionEvent ae) {
        if (ae.getActionCommand().equals("Clear")) {
            ta.setText("");
            tf.setText("");
        }
    }

    public static void main(String[] args) {
        new SwingEventDemo();
    }
}

java
import javax.swing.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class KeyAdapterDemo extends JFrame {

    private JLabel statusLabel;

    public KeyAdapterDemo() {
        // --- 1. Frame Setup ---
        setSize(400, 200);
        setTitle("Key Adapter Demo");
        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // --- 2. Component Setup ---
        statusLabel = new JLabel("Press any key...");
        add(statusLabel);

        // --- 3. Add the Key Listener using an Adapter Class ---
        addKeyListener(new KeyAdapter() {
            @Override
            public void keyTyped(KeyEvent e) {
                statusLabel.setText("Key Typed: " 
	                + e.getKeyChar());
            }

            @Override
            public void keyPressed(KeyEvent e) {
                int keyCode = e.getKeyCode();
                statusLabel.setText("Key Pressed: " 
	                + KeyEvent.getKeyText(keyCode));
            }
        });

        // --- 4. Make the frame visible ---
        setVisible(true);
    }

    public static void main(String[] args) {
        new KeyAdapterDemo();
    }
}

2. AdapterDemo Converted to Swing

This conversion is very straightforward. Frame becomes JFrame, Label becomes JLabel, and the WindowAdapter for closing the application is replaced with the much simpler setDefaultCloseOperation method. The MouseAdapter works identically with Swing components.

java
import javax.swing.*;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class MouseAdapterDemo extends JFrame {
    JLabel statusLabel;

    public MouseAdapterDemo() {
        // --- 1. Frame Setup ---
        setLayout(new FlowLayout());
        setTitle("Swing Adapter Class Demo");
        setSize(400, 200);
        // Simplified window closing for Swing
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // --- 2. Component Setup ---
        statusLabel = new JLabel("No event yet.");
        add(statusLabel);

        // 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.");
            }
        });

        // --- 3. Make the frame visible ---
        setVisible(true);
    }

    public static void main(String[] args) {
        new MouseAdapterDemo();
    }
}

Made with ❤️ for students, by a fellow learner.