Kelas Java Classes sebagai interface dan event listener object
Java Classes As Interface And Event Listener Object
Di artikel Mendisain Form Di Applet Java, Anda dapat mempelajari cara untuk mendesain form applet. Form tersebut hanya sekedar form dan Anda tidak dapat melakukan interaksi seperti memasukkan nilai dan kemudian menekan tombol hitung. Sekalipun Anda dapat memasukkan nilai ke setiap kotak dan menekan tombol hitung, namun tidak ada nilai hasil perhitungan. Kode yang disertakan hanya untuk mendesain form, belum sampai pada penanganan event di Java.

Kode program berikut ini adalah modifikasi yang telah diberi penanganan event. Penanganan event menggunakan teknik dimana Kelas java akan berfungsi sebagai obyek pendengar (listener object). Anda dapat membaca beberapa artikel contoh program ini di Tipe Event, Listener dan Kelas Pemicu Event (Source Object) Di java, Metoda Registrasi Dan Handler Untuk Penanganan Event Java, Tahapan Menangani Aksi (Event) Di Program Java dan Teknik Menangani Aksi (Event) Di Program Java.

Berikut ini adalah kode program dan hasil eksekusinya:

  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
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
// Nama file : FormBungaPinjaman2.java
// Menghitung bunga pinjaman dan total pembayaran

// Mengimpor kelas
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.text.DecimalFormat;
import javax.swing.border.TitledBorder;

// Deklarasi kelas
public class FormBungaPinjaman2 extends JApplet implements ActionListener {

   // Deklarasi variabel acuan
   private JLabel label1, label2, label3, label4, label5;
   private JTextField jtfPinjaman, jtfBunga, jtfWaktu, jtfBungaHD, jtfTotal;
   private JButton tombolHitung;
   private JPanel panel1, panel2, panel3, panel4;
   private Font font1, font2;
   private DecimalFormat duaAngka;

   public void init() {

      // Membuat obyek label dan panel1
      label1 = new JLabel("Pinjaman Bank");
      label2 = new JLabel("Bunga Pinjaman (%)");
      label3 = new JLabel("Jangka Waktu Pinjaman (th)");
      label4 = new JLabel("Bunga Harus Dibayar");
      label5 = new JLabel("Total Uang Dibayar");

      panel1 = new JPanel();
      panel1.setLayout(new GridLayout(5, 1));
      panel1.setBackground(Color.WHITE);
      panel1.add(label1);
      panel1.add(label2);
      panel1.add(label3);
      panel1.add(label4);
      panel1.add(label5);

      // Mengatur font yang ditampilkan di kotak teks
      font1 = new Font("Tahoma", Font.BOLD, 12);
      font2 = new Font("Tahoma", Font.BOLD + Font.ITALIC, 12);

      // Membuat obyek field dan panel2
      jtfPinjaman = new JTextField(11);
      jtfPinjaman.setHorizontalAlignment(JTextField.RIGHT);
      jtfPinjaman.setFont(font1);
      jtfBunga = new JTextField(11);
      jtfBunga.setHorizontalAlignment(JTextField.RIGHT);
      jtfBunga.setFont(font1);
      jtfWaktu = new JTextField(11);
      jtfWaktu.setHorizontalAlignment(JTextField.RIGHT);
      jtfWaktu.setFont(font1);
      jtfBungaHD = new JTextField(11);
      jtfBungaHD.setHorizontalAlignment(JTextField.RIGHT);
      jtfBungaHD.setFont(font2);
      jtfBungaHD.setForeground(Color.BLUE);
      jtfBungaHD.setEditable(false);
      jtfTotal = new JTextField(11);
      jtfTotal.setHorizontalAlignment(JTextField.RIGHT);
      jtfTotal.setFont(font2);
      jtfTotal.setForeground(Color.BLUE);
      jtfTotal.setEditable(false);

      panel2 = new JPanel();
      panel2.setLayout(new GridLayout(5, 1));
      panel2.setBackground(Color.WHITE);
      panel2.add(jtfPinjaman);
      panel2.add(jtfBunga);
      panel2.add(jtfWaktu);
      panel2.add(jtfBungaHD);
      panel2.add(jtfTotal);

      // Membuat obyek button dan panel3
      tombolHitung = new JButton("Hitung");

      panel3 = new JPanel();
      panel3.setLayout(new FlowLayout(FlowLayout.RIGHT));
      panel3.setBackground(Color.WHITE);
      panel3.add(tombolHitung);
 
      // Meletakkan panel1 dan panel2 di panel4
      panel4 = new JPanel();
      panel4.setBorder(new TitledBorder("Form Bunga Pinjaman"));
      panel4.setLayout(new BorderLayout());
      panel4.setBackground(Color.WHITE);
      panel4.add(panel1, BorderLayout.LINE_START);
      panel4.add(panel2, BorderLayout.LINE_END);

      // Meletakkan panel3 dan panel4 di applet
      getContentPane().add(panel4, BorderLayout.PAGE_START);
      getContentPane().add(panel3, BorderLayout.CENTER);

      // Registrasi objek pendengar oleh obyek sumber
      tombolHitung.addActionListener(this);
 
   }

   // Metoda validasi
   public void validasi() {

      if (jtfPinjaman.getText().equals("") ||
         jtfBunga.getText().equals("") ||
         jtfWaktu.getText().equals("")) {

         JOptionPane.showMessageDialog(null,
            "Tiga kotak teks pertama tidak boleh kososng.");
      }

      else if (!jtfPinjaman.getText().matches("[1-9]\\d*")) {
         JOptionPane.showMessageDialog(null, 
            "Input di kotak teks jumlah pinjaman salah.");
            jtfPinjaman.setText("");
      }
   
      else if (!jtfBunga.getText().matches("[1-9]\\d*")) {
         JOptionPane.showMessageDialog(null, 
            "Input di kotak teks bunga pinjaman salah.");
            jtfBunga.setText("");
      }

      else if (!jtfWaktu.getText().matches("[1-9]\\d*")) {
         JOptionPane.showMessageDialog(null, 
            "Input di kotak teks jangka waktu peminjaman salah.");
            jtfWaktu.setText("");
      }
   }

   public void actionPerformed(ActionEvent e) {

      if (e.getSource() == tombolHitung) {

         // Memanggil metoda validasi
         validasi();

         duaAngka = new DecimalFormat("0.00");

         double pinjaman = Double.parseDouble(jtfPinjaman.getText());
         double bunga = Double.parseDouble(jtfBunga.getText());
         int waktu = Integer.parseInt(jtfWaktu.getText());

         double bungaHarusDibayar = pinjaman * bunga * waktu / 100;
         double totalUangDibayar = pinjaman + bungaHarusDibayar;

         jtfBungaHD.setText("" + duaAngka.format(bungaHarusDibayar));
         jtfTotal.setText("" + duaAngka.format(totalUangDibayar));
      }
   }
}

Untuk menghindari error kesalahan input, kode program di atas menggunakan metoda validasi (baris nomor 100 – 127). Metoda validasi akan diminta metoda actionPerformed di baris nomor 134. Saat tombol “Hitung” diklik, action event akan dipicu. Applet FormBungaPinjaman yang bertindak sebagai event listener kemudian mengeksekusi blok pernyataan di metoda actionPerformed.

Saat metoda actionPerformed dieksekusi, metoda validasi dipanggil. Di dalam metoda validasi ini, pernyataan baris nomor 102 – 104 dieksekusi untuk memeriksa apakah tiga kotak teks pertama telah diberi input, bila belum dan tombol hitung ditekan, maka pernyataan baris nomor 106 dieksekusi yaitu menampilkan pesan bahwa tiga kotak teks pertama tidak boleh kosong.

Setelah semua kotak teks diberi input, baris nomor 110 – 126 kemudian memeriksa apakah nilai yang dimasukkan benar. Input yang diberikan harus karakter numerik. Bila bukan karakter numerik, kotak dialog pesan 111, 117 atau 123 ditampilkan, tergantung di kotak teks mana kesalahan input terjadi. Di bawah ini adalah salah satu contoh kotak dialog bila nilai input di kotak teks Bunga Pinjaman (%) bukan karakter numerik.

Menampilkan kotak dialog di bahasa pemrograman java

Di penyeleksian if baris nomor 110 ada metoda matches dari kelas String dan regular expression “[1-9]\\d*”. Metoda matches menerima argumen literal string yang menetapkan pola regular expression. Nilai yang dimasukkan di kotak dialok teks kemudian disamakan dengan pola regular expression. Metoda matches akan mengembalikan nilai boolean true bila polanya sama dan boolean false bila polanya tidak sama.

Anda mungkin masih binggung dengan ekspresi jtfPinjaman.getText().matches("[1-9]\\d*") di baris nomor 110 di atas. Ekspresi jtfPinjaman.getText() akan mengembalikan nilai string yaitu nilai yang dimasukkan di kotak teks Pinjaman Bank. Nilai string ini adalah obyek kelas String. Obyek kelas String menggunakan metoda matches untuk menyamakan nilai string dengan pola yang terdapat di regular expression. Terakhir, nilai boolean yang dihasilkan kemudian dibalik dengan meletakkan tanda negasi (!) di sebelah kiri ekspressi.

Regular expression [1-9]\\d* menetapkan pola karakter numerik. [1-9] memiliki arti bahwa numerik pertama hanya satu digit mana saja selain 0, \\d dapat berupa digit yang mana saja termasuk 0 dan karakter * yang mengikuti subexpression \\d memiliki arti bahwa jumlah digit berapapun dari digit manapun dibolehkan. Karakter * memberi perluasan arti pada \\d yang diikuti.

Bila tidak ada kesalahan input di kotak teks, pernyataan baris nomor 136 – 146 dieksekusi. Baris nomor 138 – 140 adalah deklarasi variabel pinjaman, bunga dengan tipe double dan waktu dengan tipe int. Variabel ini digunakan untuk menyimpan nilai pinjaman bank, bunga pinjaman dan jangka waktu pinjaman melalui metoda getText. Metoda getText mengembalikan string numerik. Agar dapat disimpan di variabel tipe double dan int, nilai harus dikonversi terlebih dahulu.

Baris nomor 142 dan 143 adalah pernyataan menghitung bunga untuk jangka waktu peminjaman dan total uang yang harus dibayar. Total uang yang harus dibayar selama jangka waktu peminjaman adalah pinjaman bank ditambah bunga pinjaman. Baris nomor 145 dan 146 adalah pernyataan untuk menampilkan nilai bunga pinjaman dan total uang yang harus dibayar di kotak teks keempat dan kelima menggunakan metoda setText.

Metoda setText memerlukan argumen berupa literal string. Untuk menampilkan nilai tipe double yang tersimpan di variabel bungaHarusDibayar dan totalUangDibayar di kotak teks, digunakan operator penggabungan string (+) yang akan merangkai string kosong dengan nilai yang tersimpan di masing-masing variabel.

Form Applet Java

Produk Populer

Murah Taffware OKD180 power supply station 220V 69800mAh
Taffware OKD180 Outdoor Power Station

Banyak jenis output, garansi resmi 1 tahun, kapasitas besar 69800 mAh, 180 watt, dan mudah dibawa.

Rp 1.045.500
(4.8/5)
Murah Fosi Audio DA2120C Power Amplifier
Fosi Audio DA-2120C Power Amplifier

2.1 channel, input bluetooth, USB, optical, coaxial, dan RCA, output ke speaker dan subwoofer pasif.

Rp 2.138.900
(5/5)
Murah Fosi Audio BT30D Pro Power Amplifier
Fosi Audio BT30D Pro Power Amplifier

2.1 channel, input bluetooth dan RCA, output speaker pasif dan aktif, serta subwoofer pasif dan aktif.

Rp 1.246.700
(5/5)
Murah Meiyulin OKD320A Power Station
Meiyulin OKD320A Outdoor Power Station

Banyak jenis output, proteksi keamanan, kapasitas besar 84000 mAh, 300 watt, dan mudah dibawa.

Rp 1.547.500
(5/5)