GUI Event Handling minggu 13
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 Object Event Listener / Handler
Event Source Komponen GUI yang membuat event Contoh: button, combo box, text field, etc
Event Listener / Handler Menerima dan menangani event Mengandung business logic Contoh: menampilkan informasi penting ke user, melakukan komputasi matematis
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 Direpresentasikan oleh class Event
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 memproses event yang muncul
Control Flow Delegasi Event Model
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: void remove<type>listener (<Type>Listener listenerobj)
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: <Type>Event
Class-class Event Event Class ComponentEvent InputEvent ActionEvent ItemEvent KeyEvent MouseEvent TextEvent WindowEvent Deskripsi Extends AWTEvent. Dibuat jika component digeser, diubah ukurannya, dibuat visible atau hidden Extends ComponentEvent. Adalah abstract root untuk semua class event yang berdasar pada model inputan Extends AWTEvent. Dibuat ketika button ditekan, list item di-click dua kali, atau menu item dipilih Extends AWTEvent. Dibuat ketika item dipilih atau tidak dipilih oleh user, misal di list atau checkbox Extends InputEvent. Dibuat ketika key ditekan, dilepas atau diketik Extends InputEvent. Dibuat ketika tombol mouse ditekan, dilepas atau di-click, atau ketika cursor mouse memasuki atau keluar area component Extends AWTEvent. Dibuat ketika isi dari text field atau text area berubah Extends ComponentEvent. Dibuat ketika object Window dibuka, ditutup, diaktifkan, dinonaktifkan, di-minimize, dimaximize, atau focus in dan focus out
Event Listener Class yang mengimplementasi interface <Type>Listener Berikut adalah daftar interfacenya: Event Listener (Interface) ActionListener MouseListener MouseMotionListener WindowListener Menerima action event Menerima mouse event Deskripsi Menerima mouse motion event, termasuk dragging dan menggerakkan mouse Menerima window event
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) dipanggil jika mouse dilepas
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) dipanggil ketika window diubah dari minimize ke normal
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 Gunakan method add<type>listener untuk menambahkannya
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();
import java.awt.*; import java.awt.event.*; Contoh Close class CloseFrame extends Frame implements WindowListener { Window 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 Implementasi dari sebua methodnya kosong
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 Terutama di event handling
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 Terutama di event handling
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();