Event di pemrograman Java dapat ditangani dengan beberapa cara. Di artikel Kelas Sebagai Interface Dan Obyek Pendengar Aksi (Event) Di java, Anda dapat mempelajari bagaimana sebuah kelas Java selain bertindak sebagai antar muka pengguna (user interface), juga bertidak sebagai obyek pendengar aksi (event). Obyek pendengar akan mendengarkan setiap event yang dipicu oleh pengguna aplikasi (misalnya mengklik tombol hitung) atau bisa oleh sistem dan akan mengeksekusi setiap baris perintah yang telah diprogramkan.

Selain kelas Java itu sendiri yang bertidak sebagai obyek pendengar event, Anda juga dapat mendeklarasikan kelas tersendiri, misalnya inner class, yang dapat digunakan sebagai obyek pendengar event. Inner class adalah kelas yang berada di dalam kelas yang lain. Inner class sebagai obyek pendengar harus mengimplementasikan interfes (interface) yang bersesuaian dengan event yang akan ditangani. Contoh program berikut ini mendemonstrasikan penggunaan inner class sebagai obyek pendengar event.

// Nama file : InnerClassAsListener.java
// Mendemontrasikan inner class sebagai obyek pendengar event

// Mengimpor kelas
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

// Deklarasi kelas
public class InnerClassAsListener extends JFrame {

   private JPanel panel1, panel2;
   private JButton tombolRed, tombolYellow, tombolGreen;

   public InnerClassAsListener() {

      // Membuat obyek JButton dan JPanel
      tombolRed = new JButton("RED");
      tombolYellow = new JButton("YELLOW");
      tombolGreen = new JButton("GREEN");

      panel1 = new JPanel();
      panel2 = new JPanel();
      panel2.setBackground(Color.RED);

      panel1.setLayout(new GridLayout(1,2));
      panel1.add(tombolRed);
      panel1.add(tombolYellow);
      panel1.add(tombolGreen);
      
      Container container = getContentPane();
      container.setLayout(new BorderLayout());
      container.add(panel2, BorderLayout.CENTER);
      container.add(panel1, BorderLayout.PAGE_END);

      // Membuat obyek pendengar
      PendengarAksi pendengar = new PendengarAksi();
 
      // Mendaftarkan obyek pendengar
      tombolRed.addActionListener(pendengar);
      tombolYellow.addActionListener(pendengar);
      tombolGreen.addActionListener(pendengar);
   }

   // Metoda main
   public static void main(String[] args) {
      InnerClassAsListener frame = new InnerClassAsListener();
      frame.setTitle("Kelas InnerClassAsListener");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setSize(280, 150);
      frame.setVisible(true);
   }

   // Mendeklarasikan inner class sebagai obyek pendengar event
   class PendengarAksi implements ActionListener {

      public void actionPerformed(ActionEvent e) {

         if (e.getSource() == tombolRed)
            panel2.setBackground(Color.RED);

         else if (e.getSource() == tombolYellow)
            panel2.setBackground(Color.YELLOW);
         
         else if (e.getSource() == tombolGreen)
            panel2.setBackground(Color.GREEN);

      }
   }
}

Java inner class

Inner class adalah kelas yang dideklarasikan di dalam kelas lain. Dari kode program di atas, inner class pendengarAksi dideklarasikan di baris nomor 55 – 69. Karena inner class bertindak sebagai obyek pendengar untuk tipe ActionEvent (event yang dipicu oleh tombol tombolRed, tombolYellow dan tombolGreen dari kelas JButton), maka inner class harus mengimplementasikan interfes ActionListener dan mendeklarasikan ulang metoda actionPerformed. Baris nomor 37 adalah pernyataan untuk mendeklarasikan variabel acuan pendengar (listener), membuat obyek kelas PendengarAksi (inner class) dan memberi variabel pendengar acuan ke obyek tersebut.

Baris nomor 40 – 42 adalah pernyataan untuk meregistrasi obyek pendengar oleh obyek sumber. Registrasi dilakukan dengan menggunakan metoda addActionListener, dimana argumen metoda tersebut adalah variabel yang mengacu ke obyek kelas PendengarAksi (listener). Saat Anda mengklik salah satu tombol (tombol berlabel “RED”, “YELLOW” dan “GREEN”), metoda actionPerformed dieksekusi. Baris nomor 59 – 66 adalah penyeleksian if untuk menyeleksi tombol mana yang memicu event menggunakan ekspresi e.getSource(). Apabila tombol yang ditekan adalah tombolRed, pernyataan baris nomor 60 dieksekusi, apabila tombol yang ditekan adalah tombolYellow, pernyataan baris nomor 63 dieksekusi dan apabila tombol yang ditekan adalah tombolGreen, pernyataan baris nomor 66 dieksekusi.