Responding to User Input GUI Event Handling Prepared

  • Slides: 35
Download presentation
Responding to User Input (GUI Event Handling) Prepared by : Pemrograman Berorientasi Obyek 14

Responding to User Input (GUI Event Handling) Prepared by : Pemrograman Berorientasi Obyek 14 Agustus 2003

What is an Event ? • Ketika user melakukan aksi terhadap sebuah user interface

What is an Event ? • Ketika user melakukan aksi terhadap sebuah user interface (misalnya meng-klik mouse atau menekan sebuah tombol), maka tindakan ini akan memunculkan sebuah event. • Event adalah OBJEK yang mendeskripsikan sebuah kejadian (peristiwa yang terjadi) • Event Source adalah pembangkit sebuah event, misalnya mouse click pada sebuah button akan membangkitkan sebuah Action. Event dgn button sbg Event Source-nya. • Event Handler adalah sebuah method yang menerima sebuah objek event, menterjemahkan, dan kemudian memproses interaksi user.

Event Listeners • AWT menghandle event dengan sekumpulan interface yang disebut dengan Event Listeners

Event Listeners • AWT menghandle event dengan sekumpulan interface yang disebut dengan Event Listeners • Setiap kategori event, terdapat sebuah interface listener yang bersesuaian. • Listener tsb harus diimplementasikan oleh class dari objek yang akan menerima event tersebut. • Listener ini akan menetapkan method mana yang harus didefinisikan dalam sebuah class yang sesuai untuk menerima tipe event tersebut. • Method–method ini akan dipanggil ketika event ybs terjadi.

Kategori Event, Interface & Methodnya (1) Kategori Nama Interface Method Action. Listener action. Performed(Action.

Kategori Event, Interface & Methodnya (1) Kategori Nama Interface Method Action. Listener action. Performed(Action. Event) Item. Listener item. State. Changed(Item. Event) Mouse. Listener mouse. Pressed(Mouse. Event) mouse. Released (Mouse. Event) mouse. Entered (Mouse. Event) mouse. Exited (Mouse. Event) mouse. Clicked (Mouse. Event) Mouse Motion Mouse. Motion. Listener mouse. Dragged (Mouse. Event) mouse. Moved (Mouse. Event) Key. Listener key. Pressed(Key. Event) key. Released (Key. Event) key. Typed (Key. Event) Focus. Listener focus. Gained(Focus. Event) focus. Lost (Focus. Event)

Kategori Event, Interface & Methodnya (2)

Kategori Event, Interface & Methodnya (2)

Example

Example

How to Implement an Event Handler? • Seluruh basic event listener terdapat dalam paket

How to Implement an Event Handler? • Seluruh basic event listener terdapat dalam paket java. awt. event, sehingga untuk bisa menggunakan class tersebut, gunakan statemen sbb : import java. awt. event. *; • Setiap event handler membutuhkan 3 bagian kode sbb : 1. Pada bagian deklarasi dari class yg akan menghandle event, tuliskan kode yang menspesifikasikan bahwa class tsb mengimplementasikan (implements) sebuah listener ataukah menurunkan (extends) sebuah class yang mengimplementasikan sebuah interface listener, misalnya : public class My. Class implements Action. Listener {

How to Implement an Event Handler? 2. Kode yang mengimplementasikan method yang terdapat dalam

How to Implement an Event Handler? 2. Kode yang mengimplementasikan method yang terdapat dalam interface listener ybs, misalnya : public void action. Performed(Action. Event e) { … //kode yang mengakomodasi aksi dari user } 3. Kode yang mendaftarkan sebuah instance dari class event handler sebagai listener untuk satu atau lebih komponen, misalnya : some. Component. add. Action. Listener(instance. Of. My. Class);

- Panel User mengklik button Button Action. Event action. Performed(Action. Event e) { ….

- Panel User mengklik button Button Action. Event action. Performed(Action. Event e) { …. }

Contoh : Test. Button. java import java. awt. *; public class Test. Button {

Contoh : Test. Button. java import java. awt. *; public class Test. Button { private Frame f; private Button b; public Test. Button() { f=new Frame("Test"); b=new Button("Press Me"); b. set. Action. Command("Di-klik"); } public void launch. Frame() { b. add. Action. Listener(new Button. Handler()); f. add(b, Border. Layout. CENTER); f. pack(); f. set. Visible(true); } public static void main(String args[]) { Test. Button gui. App=new Test. Button(); gui. App. launch. Frame(); } } import java. awt. event. *; public class Button. Handler implements Action. Listener { public void action. Performed(Action. Event e) { System. out. println("Action terjadi. . . "); System. out. println("Button dalam keadaan " + e. get. Action. Command()); } }

Hasilnya… Jika button “Press Me” tersebut di-klik, maka program akan menuliskan di DOS Console

Hasilnya… Jika button “Press Me” tersebut di-klik, maka program akan menuliskan di DOS Console sebagai berikut :

Diagramnya • Proses pada program di atas secara diagram bisa digambarkan sbb :

Diagramnya • Proses pada program di atas secara diagram bisa digambarkan sbb :

Event-Handling Methods • Ketika meng-asosiasikan sebuah interface dengan sebuah class, maka class tsb haruslah

Event-Handling Methods • Ketika meng-asosiasikan sebuah interface dengan sebuah class, maka class tsb haruslah meng-handle seluruh method yang ada dalam interface ybs • Sebagai contoh interface Action. Listener hanya memiliki satu method : action. Performed(), maka seluruh class yang mengimplementasikan Action. Listener haruslah memiliki sebuah method dengan struktur sbb : public void action. Performed(Action. Event e) { //handle event here }

Event-Handling Methods • Setiap event listener memiliki sebuah parameter berupa sebuah objek yang diturunkan

Event-Handling Methods • Setiap event listener memiliki sebuah parameter berupa sebuah objek yang diturunkan dari class Event. Object. • Meskipun seluruh parameter diturunkan dari class Event. Object, tipe dari parameter umumnya bergantung pada jenis event listenernya. Misalnya, parameter untuk method yang menghandle mouse events adalah sebuah instance dari Mouse. Event, sedangkan untuk action events adalah Action. Event, dst; di mana masing-masing instance tsb adalah indirect subclass dari Event. Object

Complex Example : implementasi 2 buah listener • Program Two. Listener. java digunakan untuk

Complex Example : implementasi 2 buah listener • Program Two. Listener. java digunakan untuk mendeteksi gerakan mouse ketika dalam keadaan ditekan (mouse dragging) serta gerakannya ketika dalam keadaan tidak ditekan (mouse moving). • Untuk itu diimplementasikan dua buah interface, yaitu Mouse. Listener dan Mouse. Motion. Listener

Contoh : Two. Listener. java import java. awt. *; import java. awt. event. *;

Contoh : Two. Listener. java import java. awt. *; import java. awt. event. *; public class Two. Listener implements Mouse. Motion. Listener, Mouse. Listener { private Frame f; private Text. Field tf; private Label lb; public Two. Listener() { f = new Frame("Contoh 2 listener"); tf = new Text. Field(30); lb = new Label(“Click & Drag mouse…”); } public void launch. Frame() { // Add components to the frame f. add(label, Border. Layout. NORTH); f. add(tf, Border. Layout. SOUTH); // Add this object as a listener f. add. Mouse. Motion. Listener(this); f. add. Mouse. Listener(this); // Set the frame and make it visible } f. set. Size(300, 300); f. set. Visible(true);

// This is Mouse. Motion. Listener event public void mouse. Dragged(Mouse. Event e) {

// This is Mouse. Motion. Listener event public void mouse. Dragged(Mouse. Event e) { String s="Mouse dragging: X = " + e. get. X() + " Y = " + e. get. Y(); tf. set. Text(s); } // These are Mouse. Listener events public void mouse. Entered(Mouse. Event e) { String s="Mouse entered. . . "; tf. set. Text(s); } public void mouse. Exited(Mouse. Event e) { String s="Mouse exited. . . "; tf. set. Text(s); } // Unused Mouse. Motion. Listener method. All methods of a listener must // be present in the class even if they are not used. public void mouse. Moved(Mouse. Event e) { } // Unused Mouse. Listener methods. public void mouse. Pressed(Mouse. Event e) { } public void mouse. Clicked(Mouse. Event e) { } public void mouse. Released(Mouse. Event e) { } } public static void main(String args[ ]) { Two. Listener two = new Two. Listener(); two. launch. Frame(); }

Ketika mouse berada diluar area

Ketika mouse berada diluar area

Ketika mouse berada di dalam area

Ketika mouse berada di dalam area

Ketika mouse sedang di-click & drag

Ketika mouse sedang di-click & drag

Beberapa catatan…. 1. Implementasi multiple interfaces deklarasikan multiple interfaces dengan dipisahkan oleh tanda koma

Beberapa catatan…. 1. Implementasi multiple interfaces deklarasikan multiple interfaces dengan dipisahkan oleh tanda koma implements Mouse. Motion. Listener, Mouse. Listener 2. Listening kepada multiple sources add. Mouse. Motion. Listener(this); add. Mouse. Listener(this); Kedua tipe event tsb mengakibatkan dipanggilnya beberapa method ke dalam class Two. Listener. Sebuah objek dapat “listen” kepada sebanyak mungkin event source yang diperlukan; class tsb hanya butuh mengimplementasikan interface yang diperlukan.

Using Adapters to Handle Events • Sebagian besar interface listener berisi lebih dari stu

Using Adapters to Handle Events • Sebagian besar interface listener berisi lebih dari stu method, misalnya interface Mouse. Listener berisi 5 method: mouse. Pressed, mouse. Released, mouse. Entered, mouse. Exited, dan mouse. Clicked. • Meskipun yang dipakai hanya mouse click, jika dibuat class yang secara langsung mengimplementasikan Mouse. Listener, maka class tersebut harus mengimplementasikan seluruh method tsb. Method-method yang tidak dipakai tetap harus dituliskan dengan body dikosongkan. Hal ini akan menghasilkan sekumpulan method dengan body kosong yang membuat program susah untuk dibaca dan dimaintain. •

Using Adapters to Handle Events //An example with cluttered but valid code. public class

Using Adapters to Handle Events //An example with cluttered but valid code. public class My. Class implements Mouse. Listener {. . . some. Object. add. Mouse. Listener(this); . . . /* Empty method definition. */ public void mouse. Pressed(Mouse. Event e) { } /* Empty method definition. */ public void mouse. Released(Mouse. Event e) { } /* Empty method definition. */ public void mouse. Entered(Mouse. Event e) { } /* Empty method definition. */ public void mouse. Exited(Mouse. Event e) { } public void mouse. Clicked(Mouse. Event e) {. . . //Event handler implementation goes here. . . } }

Using Adapters to Handle Events • Untuk menghindarinya, API umumnya menyertakan sebuah class adapter

Using Adapters to Handle Events • Untuk menghindarinya, API umumnya menyertakan sebuah class adapter untuk setiap listener interface yang memiliki lebih dari satu method, misalnya class Mouse. Adapter mengimplementasikan interface Mouse. Listener. • Sebuah class adapter mengimplementasikan seluruh method dalam interface dalam versi kosongannya. Selanjutnya dilakukan override hanya terhadap method yang diperlukan. • Untuk menggunakan sebuah adapter, buatlah sebuah subclass dari adapter tsb sebagai pengganti dari implementasi sebuah listener interface. Misalnya sebuah class menurunkan class Mouse. Adapter, maka secara otomatis class tsb sekaligus menurunkan definisi dari seluruh 5 method dari Mouse. Listener dalam versi kosongnya.

An example of extending an adapter class /* * An example of extending an

An example of extending an adapter class /* * An example of extending an adapter class instead of * directly implementing a listener interface. */ public class My. Class extends Mouse. Adapter {. . . some. Object. add. Mouse. Listener(this); . . . public void mouse. Clicked(Mouse. Event e) {. . . //Event handler implementation goes here. . . } }

Inner Class & Anonymous Inner Class • Jika diinginkan agar class event handling tidak

Inner Class & Anonymous Inner Class • Jika diinginkan agar class event handling tidak menurunkan secara langsung dari class adapter, misalnya dikarenakan class tsb sudah menurunkan class yg lain (misalnya: extends JApplet), --padahal Java tidak mengijinkan untuk melakukan multiple inheritance--, maka solusinya : gunakan inner class (class di dalam subclass Applet) yang menurunkan class Mouse. Adapter.

An example of using an inner class public class My. Class extends Applet {.

An example of using an inner class public class My. Class extends Applet {. . . some. Object. add. Mouse. Listener(new My. Adapter()); . . . class My. Adapter extends Mouse. Adapter { public void mouse. Clicked(Mouse. Event e) {. . . //Event handler implementation goes here. . . } } }

An example of using an inner class : Test. Adapter. java import java. awt.

An example of using an inner class : Test. Adapter. java import java. awt. *; import java. awt. event. *; public class Test. Adapter { private Frame f; private Text. Field tf; public Test. Adapter() { f=new Frame("Contoh pemakaian Adapter. . . "); tf=new Text. Field(30); } public void launch. Frame() { Label label=new Label("Click & drag mouse. . . "); f. add(label, Border. Layout. NORTH); f. add(tf, Border. Layout. SOUTH); f. add. Mouse. Motion. Listener(new My. Mouse. Motion. Listener()); f. set. Size(300, 200); f. set. Visible(true); }

An example of using an inner class : Test. Adapter. java class My. Mouse.

An example of using an inner class : Test. Adapter. java class My. Mouse. Motion. Listener extends Mouse. Motion. Adapter { public void mouse. Dragged(Mouse. Event e) { String s = "Mouse dragging : X = " + e. get. X() + " Y = " + e. get. Y(); tf. set. Text(s); } } public static void main(String args[]) { Test. Adapter obj = new Test. Adapter(); obj. launch. Frame(); } }

Hasilnya…. .

Hasilnya…. .

Anonymous inner class • Anonymous inner class adalah sebuah class tanpa nama yang didefinisikan

Anonymous inner class • Anonymous inner class adalah sebuah class tanpa nama yang didefinisikan dalam class yang lain. Cara ini awalnya terkesan membingungkan, namun jika sudah terbiasa, justru akan membuat program lebih jelas. Hal ini dikarenakan implementasi dari event handler secara langsung diletakkan sesudah event handler tsb didaftarkan. public class My. Class extends Applet {. . . some. Object. add. Mouse. Listener(new Mouse. Adapter() { public void mouse. Clicked(Mouse. Event e) {. . . //Event handler implementation goes here. . . } }); . . . }

Modify : Two. Listener dengan inner class • Implementasi program dengan inner class, sbb

Modify : Two. Listener dengan inner class • Implementasi program dengan inner class, sbb : . . . add. Mouse. Motion. Listener(new My. Mouse. Motion. Listener()); . . . class My. Mouse. Motion. Listener extends Mouse. Adapter { public void mouse. Dragged(Mouse. Event e) {. . . } } • Implementasi program dengan anonymous inner class, sbb : . . . add. Mouse. Motion. Listener(new Mouse. Motion. Adapter(){ public void mouse. Dragged(Mouse. Event e) {. . . } }); // <- note the closing parenthesis. . .

import java. awt. *; import java. awt. event. *; public class Test. Anonymous {

import java. awt. *; import java. awt. event. *; public class Test. Anonymous { private Frame f; private Text. Field tf; public Test. Anonymous() { f = new Frame("Anonymous classes example"); tf = new Text. Field(30); }

public void launch. Frame() { Label label = new Label("Click and drag the mouse");

public void launch. Frame() { Label label = new Label("Click and drag the mouse"); // Add components to the frame f. add(label, Border. Layout. NORTH); f. add(tf, Border. Layout. SOUTH); // Add a listener that uses an anonymous class f. add. Mouse. Motion. Listener ( new Mouse. Motion. Adapter() { public void mouse. Dragged(Mouse. Event e) { String s = "Mouse dragging: X = "+ e. get. X() + " Y = " + e. get. Y(); tf. set. Text(s); } }); // <- note the closing parenthesis f. add. Mouse. Listener(new Mouse. Click. Handler()); // Size the frame and make it visible f. set. Size(300, 200); f. set. Visible(true); }

public static void main(String args[]) { Test. Anonymous obj = new Test. Anonymous(); obj.

public static void main(String args[]) { Test. Anonymous obj = new Test. Anonymous(); obj. launch. Frame(); } }