GUI Event Handling

Download Report

Transcript GUI Event Handling

GUI Event Handling
Event (kejadian)
• Event : kejadian yang muncul ketika user
berinteraksi dengan aplikasi.
• Contoh :
– klik mouse
– klik tombol
– mouse bergerak di atas form
– memilih dari combo box/list
– klik kanan/kiri mouse di atas komponen,
– dll
Event Handling
• Proses untuk memberikan respon thd event.
• Di Java, mekanisme event handling dikenal dg
Delegation of Event model.
Delegation of Event Model
• Interaksi antara user dan komponen GUI
• Untuk mendeskripsikan bagaimana program
merespon interaksi user
• Bagian-bagian penting:
– event source
– event listener / Handler
– event object
Event Source
• Komponen GUI yang membuat event atau
tempat terjadinya event.
• yaitu berupa komponen-komponen visual,
seperti : button, combo box, text field, etc
Event Listener / Handler
• Objek penerima & pengolah event
• Menerima dan menangani event,
mengandung business logic
• Contoh: menampilkan informasi penting ke
user, melakukan komputasi matematis, dan
lain sebagainya.
Event Object
• Objek yang terbentuk saat terjadi event
• Yaitu ketika user berinteraksi dengan
komponen GUI. Seperti : tekan button, ketik di
text field, dll.
• Mengandung semua informasi yang
berhubungan dengan event yang muncul,
seperti : Tipe event yang muncul, asal dari
event tersebut.
• Direpresentasikan oleh class Event
Control Flow “Delegasi Event Model”
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
yang parameter sama dengan object event)
• Sekali listener menerima object event dari event
source :
• mengartikan event
• memproses event yang muncul
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)
Komponen pada event handling
1. Kelas untuk menangani event harus
mengimplementasikan (kelas/interface) event
listener. Cara lain adlh dg membuat kelas turunan
dari kelas yang telah mengimplementasikan salah
satu event listener.
2. Kelas yang mengimplementasikan listener harus
mengimplementasikan seluruh method yang ada di
kelas/interface listener.
3. Listener harus didaftarkan ke dalam objek yang
akan berperan sbg event source.
Macam-macam Event Source
Event Source
Keterangan
Button
Membangkitkan ActionEvent pd saat button diklik
Checkbox
Membangkitkan ItemEvent pd saat di-check atau un-check
Choice
Membangkitkan ItemEvent pd saat pilihan diubah
List
Membangkitkan ActionEvent pd saat sebuah item di-doubleclick dan
membangkitkan ItemEvent pd saat item dipilih/di-check maupun diuncheck
Item Menu
Membangkitkan ActionEvent pd saat item menu diklik dan
membangkitkan ItemEvent pd saat item menu di-check maupun diuncheck
Scrollbar
Membangkitkan AdjustmentEvent pd saat scrollbar diubah
Text
Membangkitkan TextEvent pd saat user memasukkan karakter pd
komponen textarea atau textfield
Window
Membangkitkan WindowEvent pd saat sebuah window atau frame
diaktivasi, ditutup, dinonaktifkan, di-minimize, di-maximize, dibuka, dan
dikeluarkan
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
Keterangan
ActionEvent
Dibangkitkan pada saat objek button di-klik, item list di-doubleclick, maupun item
menu dipilih
AdjustmentEvent
Dibangkitkan pada saat objek scrollbar diubah
ComponentEvent
Dibangkitkan pada saat sebuah komponen disembunyikan, dipindahkan, diubah
ukurannya, maupun diset mjd visible
ContainerEvent
Dibangkitkan pd saat sebuah komponen ditambahkan/dipiindahkan ke/dari sebuah
container
FocusEvent
Dibangkitkan pada saat sebuah komponen memperole atau kehilangan fokus
keyboard
InputEvent
Kelas induk yg mrpkn kelas abstrak dr semua kelas yg termsk ke dlm event input
ItemEvent
Dibangkitkan pd saat sebuah item dlm list atau checkbox diklik; jg tjd saat item-nya
dibuat, dan pd saat item menu di-check maupun un-check
KeyEvent
Dibangkitkan pd saat input dilakukan melalui keyboard
MouseEvent
Dibangkitkan pd saat mouse di-drag, dipindahkan, diklik, ditekan, maupun dilepas; jg
tjd pd saat mouse masuk atau keluar dari sebuah komponen
TextEvent
Dibangkitkan pd saat teks yg berada dalam komponen textarea atau textfield diubah
WindowEvent
Dibangkitkan pd saat window atau form diaktivasi, ditutup, di-minimize, dimaximize, dibuka, atau dikeluarkan
Event Listener
• Class yang mengimplementasi interface :
<Type>Listener
• Berikut adalah daftar interfacenya:
Beberapa Interface Listener
Tipe Event
ActionListener
Keterangan
Mendefinisikan sebuah method untuk menangani tjdnya event ActionEvent
void actionPerformed (ActionEvent e)
MouseListener
Mendefinisikan 5method untuk menangani tjdnya event MouseEvent
void
void
void
void
void
WindowListener
mouseClicked(MouseEvent e)
mouseEntered(MouseEvent e)
mouseExited(MouseEvent e)
mousePressed(MouseEvent e)
mouseReleased(MouseEvent e)
Mendefinisikan 7 method untuk menangani tjdnya event MouseEvent
void
void
void
void
void
void
void
windowActivated (WindowEvent e)
windowClosed (WindowEvent e)
windowClosing (WindowEvent e)
windowDeactivated (WindowEvent e)
windowDeiconified (WindowEvent e)
windowIconified (WindowEvent e)
windowOpened (WindowEvent e)
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 mouse 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 Event Handling
Class Event Listener
Registrasi Object Listener
Override Method
Contoh Mouse Event
Contoh Mouse Event
Contoh Mouse Event
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”
Contoh Event handling (2)
import
import
import
import
import
java.awt.event.ActionEvent;
java.awt.event.ActionListener;
javax.swing.JComboBox;
javax.swing.JFrame;
javax.swing.JLabel;
public class Swing3 extends JFrame implements ActionListener{
JComboBox cb;
JLabel lb;
String items[] = {"Acer", "Compaq", "Dell", "Fujitsu", "Sony",
"Toshiba"};
public Swing3(String title){
super(title);
setBounds(0, 0, 300, 170);
getContentPane().setLayout(null);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
cb = new JComboBox();
for (int i=0; i<items.length; i++)
cb.addItem(items[i]);
cb.setLocation(30, 50);
cb.setSize(cb.getPreferredSize());
lb = new JLabel("Program dimulai.");
lb.setLocation(150, 50);
lb.setSize(lb.getPreferredSize());
cb.addActionListener(this);
getContentPane().add(cb);
getContentPane().add(lb);
setVisible(true);
setLocationRelativeTo(null);
}
public static void main(String[] args) {
Swing3 frame = new Swing3("Demo JCombobox");
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == cb){
String s = ""+ cb.getSelectedItem();
lb.setText(s);
}
}
}
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 sebuah methodnya kosong
Class Adapter:
Contoh “Close Window”
Class Adapter:
Contoh “Close Window”
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
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