Selain kelas antarmuka grafis yang bertidak sebagai obyek pendengar event, Anda juga dapat mendeklarasikan kelas tersendiri yaitu inner class yang dapat digunakan sebagai obyek pendengar event. Inner class adalah kelas yang berada di dalam kelas yang lain. Inner class tersebut harus mengimplementasikan interface yang bersesuaian dengan event yang ditangani. Contoh program sederhana berikut ini mendemonstrasikan penggunaan inner class sebagai obyek pendengar event.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | // 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); } } } |
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 dipicu tombol tombolRed, tombolYellow dan tombolGreen kelas JButton, maka inner class harus mengimplementasikan interface ActionListener dan juga mendeklarasikan ulang metoda actionPerformed.
Baris nomor 37 adalah pernyataan untuk mendeklarasikan variabel 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 menggunakan metoda addActionListener, dimana argumen metoda tersebut adalah variabel yang mengacu ke obyek kelas PendengarAksi. Saat Anda mengklik salah satu dari tombol berlabel “RED”, “YELLOW” dan “GREEN”, metoda actionPerformed dieksekusi.
Baris nomor 59 – 66 adalah penyeleksian if sederhana untuk menyeleksi tombol yang memicu event menggunakan ekspresi e.getSource(). Bila yang ditekan adalah tombolRed, pernyataan baris nomor 60 dieksekusi, bila yang ditekan adalah tombolYellow, pernyataan baris nomor 63 dieksekusi dan bila yang ditekan adalah tombolGreen, pernyataan baris nomor 66 dieksekusi.