GUI Event Handling
Objectives / Tujuan
•
Mengenal “The Delegation Event Model”
•
Mengenal Event Classes
•
Mengenal Event Listener:
•
ActionListener Method
•
MouseListener Method
•
MouseMotionListener Method
•
WindowListener Method
•
Mengetahui langkah-langkah membuat Aplikasi GUI dengan
Event Handling
Delegation of Event
Model
•
adalah model yang digunakan Java untuk menangani
interaksi antara user dan komponen GUI
•
untuk mendeskripsikan bagaimana program
merespon interaksi user
•
Bagian-bagian penting:
•
Event Source
•
Event Listener / Handler
Event Source
•
Komponen GUI yang membuat event
Event Listener /
Handler
•
Menerima dan menangani event
•
Mengandung business logic
•
Contoh: menampilkan informasi penting ke
Event Object
•
Dibuat saat event muncul (mis: user
berinteraksi dengan komponen GUI -- tekan
button, ketik di text field, dll)
•
Mengandung semua informasi yang
berhubungan dengan event yang muncul
•
Tipe event yang muncul
•
Asal dari event tersebut
Penanganan Event
•
Listener harus diregistrasi di event source
•
Sekali diregistrasi, listener menunggu hingga event muncul
•
Kapan event muncul?
•
Object event dibuat oleh event source
•
Object event dikirim oleh event source ke listener yang
teregister (dengan memanggil method milik event listener
yanga parameter sama dengan object event)
•
Sekali listener menerima object event dari asal:
•
mengartikan event
Control Flow “Delegasi
Event Model”
9
Registrasi Listener
Berdasarkan Event Source
•
Registrasi listener:
void add<Type>Listener (<Type>Listener listenerObj)
dimana:
•
<Type> tergantung pada jenis event source (mis:
Key, Mouse, Focus, Component, Action, dll
•
Satu event source bisa meregistrasi beberapa
listener
•
Menghapus listener yang sudah teregister:
Class-class Event
•
Class EventObject :
•
Terletak di package
java.util
•
Class AWTEvent :
•
Terletak di package
java.awt
•
merupakan subclass dari EventObject
•
merupakan root dari semua event berbasis AWT
•
Penamaan nama subclass:
Class-class Event
Event Class
Deskripsi
ComponentEvent
Extends AWTEvent. Dibuat jika component digeser, diubah
ukurannya, dibuat visible atau hidden
InputEvent
Extends ComponentEvent. Adalah abstract root untuk
semua class event yang berdasar pada model inputan
ActionEvent
Extends AWTEvent. Dibuat ketika button ditekan, list item
di-click dua kali, atau menu item dipilih
ItemEvent
Extends AWTEvent. Dibuat ketika item dipilih atau tidak
dipilih oleh user, misal di list atau checkbox
KeyEvent
Extends InputEvent. Dibuat ketika key ditekan, dilepas atau
diketik
MouseEvent
Extends InputEvent. Dibuat ketika tombol mouse ditekan,
dilepas atau di-click, atau ketika cursor mouse memasuki
atau keluar area component
TextEvent
Extends AWTEvent. Dibuat ketika isi dari text field atau
text area berubah
WindowEvent
Extends ComponentEvent. Dibuat ketika object Window
dibuka, ditutup, diaktifkan, dinonaktifkan, minimize,
di-maximize, atau focus in dan focus out
Event Listener
•
Class yang mengimplementasi interface
<Type>Listener
•
Berikut adalah daftar interfacenya:
Event Listener
(Interface)
Deskripsi
ActionListener
Menerima action event
MouseListener
Menerima mouse event
MouseMotionListener
Menerima mouse motion event, termasuk
dragging dan menggerakkan mouse
ActionListener
•
Hanya memiliki satu method:
public void actionPerformed(ActionEvent e)
merupakan handler untuk ActionEvent yang
terjadi
MouseListener
•
public void mouseClicked(MouseEvent e)
•
memiliki handler untuk event ketika mouse di-click (tekan dan lepas)
•
public void mouseEntered(MouseEvent e)
•
untuk menangani kasus dimana mouse memasuki area component
•
public void mouseExited(MouseEvent e)
•
untuk menangani kasus dimana mouse keluar area component
•
public void mousePressed(MouseEvent e)
•
dipanggil jika mouse ditekan
•
public void mouseReleased(MouseEvent e)
MouseMotionListener
•
public void mouseDragged(MouseEvent e)
•
dipanggil jika mouse ditekan pada suatu
component kemudian memindah component
tsb (dragged). Dipanggil beberapa kali selama
mouse di-dragged
•
public void mouseMoved(MouseEvent e)
•
dipanggil jika mouse digerakkan di component
tanpa menekan mouse. Dipanggil beberapa kali
ketika mose digerak-gerakkan
WindowListener
•
public void windowOpened(WindowEvent e)
•
dipanggil ketika object Window dibuka
•
public void windowClosing(WindowEvent e)
•
dipanggil ketika user mencoba untuk menutup window dari system menu
•
public void windowClosed(WindowEvent e)
•
dipanggil ketika window ditutup, digunakan untuk membebaskan resource yang
digunakan oleh window
•
public void windowActivated(WindowEvent e)
•
dipanggil ketika window dijadikan active window
•
public void windowIconified(WindowEvent e)
•
dipanggil ketika window di-minimize
•
public void windowDeiconified(WindowEvent e)
Langkah-Langkah Membuat Aplikasi
GUI dengan Event Handling
1. Membuat class GUI
•
Mengatur tampilan aplikasi GUI (components dan layout-nya)
2. Membuat class event listener (class yang mengimplementasi interface
listener yang tepat)
•
Override semua method yang dari interface listener yang dibutuhkan
•
Tulislah program di masing-masing method sesuai kebutuhan anda
•
Untuk method yang tidak dinginkan, kosongi saja bagian
implementasinya
3. Registrasikan object listener ke event source
•
Object adalah instansiasi dari class listener di langkah ke-2
Contoh Mouse Event
import java.awt.*;
import java.awt.event.*;
public class MouseEventsDemo extends Frame implements
MouseListener, MouseMotionListener { TextField tf;
public MouseEventsDemo(String title) { }
// Displays GUI
public void launchFrame() {
/* Add components to the frame */
add(tf, BorderLayout.SOUTH); setSize(300, 300);
setVisible(true); }
// Implement methods of event listener interface
public void mouseClicked(MouseEvent me) { String msg = "Mouse clicked.";
tf.setText(msg); }
Contoh Mouse Event
public void mouseEntered(MouseEvent me) { String msg = "Mouse entered component."; tf.setText(msg);
}
public void mouseExited(MouseEvent me) { String msg = "Mouse exited component."; tf.setText(msg);
}
public void mousePressed(MouseEvent me) { String msg = "Mouse pressed.";
tf.setText(msg); }
public void mouseReleased(MouseEvent me) { String msg = "Mouse released.";
tf.setText(msg); }
Contoh Mouse Event
public void mouseDragged(MouseEvent me) {
String msg = "Mouse dragged at " + me.getX() + "," + me.getY(); tf.setText(msg);
}
public void mouseMoved(MouseEvent me) {
String msg = "Mouse moved at " + me.getX() + "," + me.getY(); tf.setText(msg);
}
// Main method
public static void main(String args[]) {
MouseEventsDemo med = new MouseEventsDemo("Mouse Events Demo"); med.launchFrame();
} }
Contoh “Close
Window”
import java.awt.*;
import java.awt.event.*;
class CloseFrame extends Frame implements WindowListener { Label label;
CloseFrame(String title) { super(title);
label = new Label("Close the frame."); this.addWindowListener(this);
}
void launchFrame() { setSize(300, 300); setVisible(true); }
// Implement methods of listener interface
public void windowActivated(WindowEvent e) { }
public void windowClosed(WindowEvent e) { }
public void windowClosing(WindowEvent e) { setVisible(false);
System.exit(0); }
Contoh “Close
Window”
public void windowDeactivated(WindowEvent e) { }
public void windowDeiconified(WindowEvent e) { }
public void windowIconified(WindowEvent e) { }
public void windowOpened(WindowEvent e) { }
// Main method
public static void main(String args[]) {
CloseFrame cf = new CloseFrame("Close Window Example"); cf.launchFrame();
} }
Class Adaptor
•
Mengapa menggunakan Class Adaptor?
•
Mengimplementasi semua method di interface tidak
praktis
•
Hanya beberapa method saja yang dibutuhkan
•
Adapter class:
•
Class di Java
•
Mengimplementasi semua method dari setiap interface
listener yang memiliki lebih dari satu method
Class Adapter: Contoh
“Close Window”
import java.awt.*;
import java.awt.event.*;
class CloseFrameAdapter extends Frame { Label label;
CFListener w = new CFListener(this); CloseFrameAdapter(String title) { super(title);
label = new Label("Close the frame."); this.addWindowListener(w); } void launchFrame() { setSize(300, 300); setVisible(true); }
public static void main(String args[]) {
CloseFrame cf = new CloseFrame("Close Window Example"); cf.launchFrame();
} }
Class Adapter: Contoh
“Close Window”
class CFListener extends WindowAdapter { CloseFrameAdapter ref;
CFListener(CloseFrameAdapter ref) { this.ref = ref;
}
public void windowClosing(WindowEvent e) { ref.dispose();
System.exit(1); }
Inner Class
•
Class yang dideklarasikan di dalam class
lainnya
•
Mengapa menggunakan inner class?
•
Supaya program lebih simple
Class Adapter: Contoh “Close
Window” dengan Inner Class
import java.awt.*; import java.awt.event.*;
class CloseFrameAdapterInner extends Frame { Label label;
CloseFrameAdapterInner(String title) { super(title);
label = new Label("Close the frame."); this.addWindowListener(new CFListener()); } void launchFrame() { setSize(300, 300); setVisible(true); }
class CFListener extends WindowAdapter {
public void windowClosing(WindowEvent e) { dispose();
System.exit(1); }
}
public static void main(String args[]) {
CloseFrame cf = new CloseFrame("Close Window Example"); cf.launchFrame();
} }
Anonymous Inner Class
•
Class yang tidak memiliki nama
•
Mengapa?
•
Lebih simple daripada inner class
Class Adapter: Contoh “Close
Window” dengan Anonymous Class
import java.awt.*;import java.awt.event.*;
class CloseFrameAdapterNoName extends Frame { Label label;
CloseFrameAdapterNoName(String title) { super(title);
label = new Label("Close the frame.");
this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose();
System.exit(1); }
public void windowClosed(WindowEvent e) { dispose(); System.exit(1); } }); } void launchFrame() { setSize(300, 300); setVisible(true); }
public static void main(String args[]) {
CloseFrame cf = new CloseFrame("Close Window Example"); cf.launchFrame();
} }