Banner Java

Memahami Cara Menangani Aksi (Event) Di Pemrograman Java

Kali ini, Anda akan mempelajari bagaimana program aplikasi atau applet dapat berinteraksi saat tombol perintah diklik. Interaksi pada program tidak hanya sebatas mengklik tombol perintah. Anda juga dapat melakukan interaksi lain seperti memilih item baru dari combo box, memilih item dari list box, memilih item di menu, mengklik check box, radio buttom dan sebagainya. Interaksi yang dilakukan dengan komponen-komponen tersebut akan memicu munculnya event.

Event merupakan sinyal yang memberitahukan program bahwa sesuatu telah terjadi. Event dapat digunakan untuk mengendalikan pernyataan atau blok pernyataan mana yang harus dieksekusi. Event yang dipicu atau dihasilkan akibat interaksi pengguna program, dapat ditanggapi atau diabaikan oleh program itu sendiri.

Berikut ini adalah contoh program sederhana AplikasiKaliTambah yang digunakan untuk mengalikan atau menambah dua bilangan yang telah dimasukkan. Program memiliki bagian kode yang digunakan untuk menangani aksi ketika tombol Kali(x) atau Tambah(+) diklik. Program AplikasiKaliTambah dimaksudkan untuk memberikan gambaran bagaimana penanganan aksi di pemrograman Java dilakukan. Berikut ini adalah kode program dan hasil eksekusinya:

// Nama file : AplikasiKaliTambah.java
// Mendemonstrasikan penanganan aksi di Java

// mengimpor kelas
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JLabel;
import java.text.DecimalFormat;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Container;
import java.awt.Font;
import java.awt.Color;
import java.awt.event.*;

// Deklarasi kelas
public class AplikasiKaliTambah extends JFrame
   implements ActionListener {
   
   private JTextField textNilai1, textNilai2, textHasil;
   private JLabel label1, label2, label3;
   private JButton buttonKali, buttonTambah;
   private JPanel panel1, panel2, panel3;
   private Font font1, font2;
   private DecimalFormat duaAngka;

   public AplikasiKaliTambah() {

      label1 = new JLabel("Nilai Pertama");
      label2 = new JLabel("Nilai Kedua");
      label3 = new JLabel("Hasil kalkulasi");

      panel1 = new JPanel();
      panel1.setLayout(new GridLayout(3, 1));
      panel1.add(label1);
      panel1.add(label2);
      panel1.add(label3);

      textNilai1 = new JTextField(11);
      textNilai2 = new JTextField(11);
      textHasil = new JTextField(11);

      // Mengatur properti dari text field
      font1 = new Font("Tahoma", Font.BOLD, 15);
      textNilai1.setHorizontalAlignment(JTextField.RIGHT);
      textNilai1.setFont(font1);
      textNilai2.setHorizontalAlignment(JTextField.RIGHT);
      textNilai2.setFont(font1);

      font2 = new Font("Tahoma", Font.BOLD + Font.ITALIC, 17);
      textHasil.setHorizontalAlignment(JTextField.RIGHT);
      textHasil.setFont(font2);
      textHasil.setForeground(Color.RED);
      textHasil.setEditable(false);

      panel2 = new JPanel();
      panel2.setLayout(new GridLayout(3, 1));
      panel2.add(textNilai1);
      panel2.add(textNilai2);
      panel2.add(textHasil);

      buttonKali = new JButton("Kali (x)");
      buttonTambah = new JButton("Tambah (+)");

      panel3 = new JPanel();
      panel3.setLayout(new FlowLayout(FlowLayout.RIGHT));
      panel3.add(buttonKali);
      panel3.add(buttonTambah);

      duaAngka = new DecimalFormat("0.00");
      Container container = getContentPane();
      container.setLayout(new BorderLayout());
      container.add(panel1, BorderLayout.LINE_START);
      container.add(panel2, BorderLayout.LINE_END);
      container.add(panel3, BorderLayout.PAGE_END);

      // Mendaftarkan listener
      buttonKali.addActionListener(this);
      buttonTambah.addActionListener(this);
   }

   // Mendeklarasikan ulang metoda actionPerformed (overriding)
   public void actionPerformed(ActionEvent e) {

      double nilai1 = Double.parseDouble(textNilai1.getText());
      double nilai2 = Double.parseDouble(textNilai2.getText());

      if (e.getSource() == buttonKali) {
         textHasil.setText("" + duaAngka.format(nilai1 * nilai2));
      }

      else if (e.getSource() == buttonTambah) {
         textHasil.setText("" + duaAngka.format(nilai1 + nilai2));
      }
   }

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

Kode program di atas adalah akan merespon interaksi pengguna program. Saat user berinteraksi dengan mengklik salah satu tombol perintah, misalnya tombol perintah berlabel “Kali (x)”, maka tipe event ActionEvent akan dipicu. Reaksi program pada event ini adalah nilai yang terdapat di kotak teks pertama akan dikalikan dengan nilai di kotak teks kedua dan hasil perkalian akan ditampilkan di kotak teks ketiga. Demikian juga dengan tombol perintah berlabel “Tambah (+)”, nilai yang terdapat di kotak teks pertama akan dijumlahkan dengan nilai yang terdapat di kotak teks kedua dan hasil penjumlahan akan ditampilkan di kotak teks ketiga. Perkalian atau penjumlahan kedua nilai merupakan respon program terhadap aksi yang dilakukan oleh user dengan mengklik salah satu dari dua tombol perintah tersebut.

Baris nomor 5 – 16 adalah pernyataan untuk mengimpor kelas yang digunakan untuk mendisain interfes grafis pengguna sebagaimana yang Anda lihat pada hasil eksekusi di kode program tersebut. Baris nomor 17 adalah pernyataan yang digunakan untuk mengimpor kelas-kelas event yang digunakan. Satu tipe event yang akan digunakan dalam program ini adalah kelas ActionEvent. Tipe event ini dapat dipicu salah satunya dengan mengklik tombol perintah.

Baris nomor 20 adalah deklarasi kelas AplikasiKaliTambah. Kelas AplikasiKaliTambah adalah turunan dari kelas JFrame dan mengimplementasikan interface ActionListener. Ini berarti bahwa selain digunakan sebagai form aplikasi, kelas AplikasiKaliTambah juga digunakan sebagai obyek pendengar action event (action listener object atau hanya listener object). Obyek pendengar event (kelas AplikasiKaliTambah) memiliki kepedulian untuk mendengarkan peristiwa event (ActionEvent) yang dihasilkan atau dipicu oleh tombol perintah (obyek dari kelas JButton) pada saat tombol tersebut diklik. Semua kelas dari obyek pendengar event harus mengimplementasikan interface yang bersesuaian dengan tipe event. Anda dapat mengamati pola penamaan antara event dan interfesnya dimana ActionEvent mempunyai interfes yang bersesuaian yaitu ActionListener.

Baris nomor 23 – 78 adalah pernyataan untuk mendesain interfes grafis (form aplikasi). Baris nomor 81 dan 82 adalah pernyataan untuk mendaftar obyek pendengar event (listener object). Obyek pendengar tersebut harus didaftar oleh obyek sumber (source object) buttonKali dan buttonTambah (obyek dari kelas JButton) menggunakan metoda addActionListener. Sekali lagi, Anda dapat perhatikan pola penamaan metoda yang digunakan oleh obyek sumber untuk mendaftar obyek pendengar. Ketika tombol perintah diklik (ditekan dan dilepaskan kembali), tipe event ActionEvent akan dipicu. Kelas dari obyek pendengar event ini harus mengimplementasikan interfes ActionListiner dan obyek sumber harus mendaftar obyek pendengar menggunakan metoda addActionListener. Pola penamaan antara tipe event, interfes yang diimplementasikan dan metoda yang digunakan untuk mendaftar obyek pendengar dapat dirumuskan dengan XEvent, XListener dan addXListener.

Metoda addActionListener mempunyai satu parameter dimana argumen parameter tersebut adalah obyek dari kelas pendengar. Di pernyataan tersebut, argumen dari parameter metoda addActionListener adalah kata kunci this. Kata kunci this di sini mewakili obyek kelas AplikasiKaliTambah yang juga bertindak sebagai obyek pendengar.

Baris nomor 86 adalah deklarasi ulang metoda actionPerformed(ActionEvent e) yang didefinisikan di interfes ActionListener. Metoda ini mempunyai satu buah parameter e dengan tipe kelas ActionEvent. Obyek ActionEvent berisi properti yang berkaitan dengan tipe event yang bersesuaian, misalnya e.getSource digunakan untuk mengetahui obyek sumber (di contoh program bisa berupa obyek buttonKali atau buttonTambah) dan e.getActionCommand digunakan untuk mengembalikan label yang ada di tombol perintah. Metoda instan getSource dan getActionComman tersebut didefinisikan di kelas EventObject. Setiap kelas Java yang mengimplementasikan interfes, harus mendeklarasikan ulang semua metoda yang dimiliki oleh interfes yang diimplementasikan sekalipun metoda tersebut tidak digunakan (tidak diberi kode penanganan event). Metoda-metoda dari interfes listener (misalnya actionPerformed dari interfes ActionListener) yang dideklarasikan ulang di obyek pendengar disebut juga dengan handler.

Variabel nilai1 dan nilai2 di baris nomor 88 dan 89 digunakan untuk menyimpan nilai yang telah dimasukkan di kotak text pertama dan kedua setelah terlebih dahulu dikonversi ke tipe data double. Di penyeleksian if baris nomor 91, apabila tombol perintah yang diklik oleh pengguna program adalah tombol perkalian (buttonKali), maka pernyataan baris nomor 92 akan dieksekusi yaitu mengalikan kedua nilai, memformat tampilan nilai hasil perkalian dan menampilkannya di kotak teks ketiga. Demikian pula dengan baris nomor 95, apabila tombol perintah yang diklik oleh pengguna program adalah tombol penjumlahan (buttonTambah), maka pernyataan di baris nomor 96 akan dieksekusi yaitu menjumlahkan kedua nilai, memformat tampilan nilai hasil penjumlahan dan menampilkannya di kotak teks ketiga.

Cara penanganan aksi (event) di Java

Untuk memperbaiki mutu konten, Anda dapat berpartisipasi dengan cara melaporkan apabila menemukan kesalahan ketik, kata-kata rangkap, redaksi kurang pas (jelas), gambar pendukung tidak ada dan sebagainya melalui form Kontak Kami untuk mendapatkan perbaikan. Terima kasih atas kerjasamanya.

Hindro HindriantoHindro adalah pendiri sekaligus admin termasmedia.com dan topikit.com, blog online yang mengulas teknologi informasi. Dunia web mulai ditekuni tahun 2012 dengan mempelajari CMS Joomla dan Wordpress. Beberapa buku yang sekarang dipelajari antara lain PHP, HTML5, ASP.NET 4.5, JavaScript, CSS3, MySQL, Adobe Dreamweaver, Adobe Photoshop dan Adobe Flash.