Penanganan Kejadian (event handling)
5. Penanganan Kejadian (event handling)
package :
java.awt.event dan javax.swing.event
agar komponen dapat menangani kejadian, kompnen tsb harus :
1. didaftarkan menjadi pendengar (listener), contoh :
JButton tombolSelesai = new JButton("Selesai");
tombolSelesai.addActionListener(this);
scra umum bentuk metode nya :
addxxxListener()
2. Harus mengimplementasikan suatu interface listener
3. Membuat object suatu kelas yang merupakan kelas adapter
4. Menulis kode pada metode penanganan kejadian
kelas adapter adalah kelas bawaan java yang mengandung nama adapter
dibagian belakang dan merupakan kelas abstrak
yang merupakan implementasi dari suatu interface listener.
contoh :
windowAdapter = kelas abstrak yang mengimplementasi interface WindowListener
MouseAdapter = ----" ---- MouseListener
contoh program :
bSubmit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
oNama.setText(tNama.getText());
}
} );
kelas dan interface pada java :
kejadian dan interface | metode --> listener | Komponen
------------------------------- |----------------------------------------- |-------------------------------------
ActionEvent | addActionListener | JButton, JList dll
ActionListener | |
--------------------------------|-------------------------------------------|--------------------------------------
AdjusmentEvent | |
AdjustmentListener | addAdjusmentListener | JScrollBar
------------------------------- | -------------------------------------------| ------------------------------------
dll.
Listener dan metode penanganan kejadian :
Listener / Adapter | Metode
-------------------------- | -------------------------------------------------------
ActionListener | actionPerformed(ActionEvent)
-------------------------- | -------------------------------------------------------
AdjusmentListener | adjustmentValueChanged (AdjustmentEvent)
-------------------------- | -------------------------------------------------------
dll.
Listener Interface Listener Methods
ActionEvent ActionListener actionPerformed(ActionEvent)
ItemEvent ItemListener itemStateChanged(ItemEvent)
MouseEvent MouseListener mousePressed(MouseEvent)
mouseReleased
(MouseEvent)
mouseEntered(MouseEvent)
mouseExited(MouseEvent)
mouseClicked(MouseEvent)
MouseMotionListener
mouseDragged(MouseEvent)
konsep laen :
Dalam event handling pada Java ada empat bagian penting yang harus diketahui:
1.Event Object merupakan object yang mendiskripsikan sebuah event yang di-
trigger oleh event source.
2.Event Handler merupakan method yang menerima event object dan melakukan
respond yang sesuai dengan event object tersebut.
3.Event Listener merupakan interface yang akan meng-handle event yang terjadi.
setiap type event mempunyai interface yang bersesuaian. Listener tersebut harus
diimplementasikan oleh class yang akan meng-handle event
4.Event Source merupakan pembangkit / trigger sebuah event objects
setiap event object mempunyai type event yang berbdea beda.
sehingga kita harus menentukan type event sebelum menentukan jenis interface
listener. karena setiap type event mempunyai jenis interface listener yang
bersesuaian.
berikut ini type type event yang ada di Java :
1.ActionEvent
2.ItemEvent
3.WindowEvent
4.ContainerEvent
5.ComponentEvent
6.FocusEvent
7.TextEvent
8.KeyEvent
9.MouseEvent
10.AdjustmentEvent
Berikut ini Interface Listener
1.ActionListener
2.ItemListener
3.WindowListener
4.ContainerListener
5.ComponentListener
6.FocusListener
7.TextListener
8.KeyListener
9.MouseListener
10.MouseMotionListener
11.AdjustmentListener
Berdasarkan tulisan diatas, setiap type event mempunyai satu jenis interface listener
kecuali MouseEvent yang mempunyai dua jenis interface listener. dan setiap
interface mempunyai method abstract yang harus di override class yang meng-
impletasikan interface.
event listener dan event handler terdapat pada package java.awt.event
Bagaimana event handling dalam Java? ada tiga langkah penting dalam event
handling
1.Deklarasikan class yang akan meng-handle event yang terjadi dan tuliskan code
yang menyatakan class tersebut meng-implement interface listener
2.Event source mendaftarkan sebuah listener melalui method add<type>Listener
3.Kode yang mengimplementasikan method pada interface listener pada class yang
akan meng-handle event. [ Override ]
Contoh program sederhana :
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Penjumlahan2Field extends JFrame
{
JLabel labelData1,labelData2,labelHasil;
JTextField field1,field2,field3;
JButton button;
public Penjumlahan2Field()
{
setLayout(null);
labelData1=new JLabel("Data 1 = ");
field1=new JTextField(8);
labelData2=new JLabel("Data 2 = ");
field2=new JTextField(8);
labelHasil=new JLabel("Hasil = ");
field3=new JTextField(8);
button=new JButton("+");
labelData1.setBounds(10,10,80,25);
field1.setBounds(65,10,80,25);
labelData2.setBounds(10,40,80,25);
field2.setBounds(65,40,80,25);
labelHasil.setBounds(10,70,80,25);
field3.setBounds(65,70,80,25);
button.setBounds(65,120,50,25);
add(labelData1);
add(field1);
add(labelData2);
add(field2);
add(labelHasil);
add(field3);
add(button);
ActionListener listener = new Penjumlahan2Field.Handler();
button.addActionListener(listener);
}
class Handler implements ActionListener{
public void actionPerformed(ActionEvent e){
String s = e.getActionCommand();
if(s.equals("+")){
String data1=field1.getText();
String data2=field2.getText();
int a=Integer.parseInt(data1);
int b=Integer.parseInt(data2);
int hasil=a+b;
field3.setText(Integer.toString(hasil));
}
}
}
public static void main(String [] args)
{
Penjumlahan2Field frame=new Penjumlahan2Field();
frame.setTitle("Penjumlahan");
frame.setSize(200,200);
//frame.setLocationRelationTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
1. Class-class adapter
Konteks:
- Diinginkan untuk menggunakan suatu class dengan antarmuka (method-method public) tertentu tanpa mengubah definisi class tersebut. Class ini kita sebut adaptee.
- Konteks permasalahan dimana kita ingin menggunakan class ini membutuhkan antarmuka yang berbeda dari yang dimiliki class adaptee. Antarmuka yang diperlukan untuk ini kita sebut target.
- Antarmuka untuk target dan antarmuka yang dimiliki adaptee secara konsep berkaitan.
Solusi:
- Antarmuka yang dibutuhkan client (target) didefinisikan sebagai interface dengan method-method yang dibutuhkan untuk menyelesaikan tugas.
- Definisikan sebuah class adapter yang mengimplementasikan interface target ini.
- Class adapter memiliki referensi terhadap objek adaptee (relasi compose a.k.a HAS_A). Class adapter menerjemahkan method yang dideklarasikan pada interface target ke dalam method dari adaptee.
- Client membungkus objek adaptee ke dalam objek adapter. Client melaksanakan tugasnya dengan memanggil method adapter, dan adapter menerjemahkannya dengan memanggil method adaptee yang bersesuaian.
- Diinginkan untuk menggunakan suatu class dengan antarmuka (method-method public) tertentu tanpa mengubah definisi class tersebut. Class ini kita sebut adaptee.
- Konteks permasalahan dimana kita ingin menggunakan class ini membutuhkan antarmuka yang berbeda dari yang dimiliki class adaptee. Antarmuka yang diperlukan untuk ini kita sebut target.
- Antarmuka untuk target dan antarmuka yang dimiliki adaptee secara konsep berkaitan.
Solusi:
- Antarmuka yang dibutuhkan client (target) didefinisikan sebagai interface dengan method-method yang dibutuhkan untuk menyelesaikan tugas.
- Definisikan sebuah class adapter yang mengimplementasikan interface target ini.
- Class adapter memiliki referensi terhadap objek adaptee (relasi compose a.k.a HAS_A). Class adapter menerjemahkan method yang dideklarasikan pada interface target ke dalam method dari adaptee.
- Client membungkus objek adaptee ke dalam objek adapter. Client melaksanakan tugasnya dengan memanggil method adapter, dan adapter menerjemahkannya dengan memanggil method adaptee yang bersesuaian.
Contoh:
Java Library:
Dalam Java, System.in membaca rentetan byte yang masuk ke dalam komputer (input stream standar). Rentetan byte ini terkandung dalam field System.in yang memiliki tipe data InputStream. Input dari keyboard merupakan karakter yang dikodekan dalam byte-byte yang dikirim oleh keyboard. Dalam program console, kita ingin membaca input dari keyboard sebagai karakter, bukan byte. Untuk itu, kita memakai objek InputStreamReader untuk menerjemahkan byte yang dibaca dari keyboard menjadi karakter.
CODE: SELECT ALL
InputStreamReader reader = new InputStreamReader(System.in);
objek InputStreamReader bertindak sebagai adapter yang menerjemahkan antarmuka (operasi) pengambilan rentetan byte input dari keyboard menjadi antarmuka (operasi) yang menghasilkan rentetan karakter. System.in bertindak sebagai objek adaptee yang melakukan "the real deal".
NB: InputStreamReader membaca karakter satu-persatu, tapi tidak bisa membaca string secara sekaligus, sehingga InputStreamReader kurang efisien -- method dari objek InputStreamReader dipanggil untuk tiap karakter yang dimasukkan lewat keyboard. Untuk meningkatkan efisiensi, pembacaan string input dari keyboard dilakukan secara buffered -- karakter yang diketikkan lewat keyboard dimasukkan ke dalam buffer terlebih dahulu untuk kemudian dibaca sekaligus dalam satu pemanggilan method.
CODE: SELECT ALL
new BufferedReader consoleInput = new BufferedReader(reader);
// atau seperti ini
new BufferedReader consoleInput = new BufferedReader(new InputStreamReader(System.in));
Pendekorasian objek InputStreamReader supaya mendukung buffered input dengan menggunakan objek BufferedRead di atas menggunakan design pattern Decorator dan tidak berkaitan dengan Adapter, atau dengan kata lain pembacaan input keyboard secara buffered dilakukan menggunakan pattern Adapter kemudian Decorator.
Komentar
Posting Komentar