Pages

Rabu, 23 Januari 2013

GUI Event Handling


Delegation Event Model 

Delegasi event model menguraikan bagaimana program Anda dapat merespon interaksi  dari  user.
Untuk  memahami  model,  pertama-tama  mari  kita  pelajari  melalui  tiga komponen utamanya.

1. Event Source 
Event  source  mengacu  pada  komponen  GUI  yang  meng-generate  event.  Sebagai contoh,
jika user menekan tombol, event source dalam hal ini adalah tombol.

2. Event Listener/Handler 
Event  listener menerima  berita  dari  event-event  dan  proses-proses  interaksi  user. Ketika
tombol  ditekan,  listener  akan  mengendalikan  dengan  menampilkan  sebuah informasi yang
berguna untuk user.

3. Event Object
Ketika sebuah event  terjadi (misal, ketika user berinteraksi dengan komponen GUI), sebuah
object  event  diciptakan.  Object  berisi  semua  informasi  yang  perlu  tentang event yang telah
terjadi. Informasi meliputi tipe dari event yang telah terjadi, seperti ketika mouse  telah di-klik.
Ada beberapa  class event   untuk kategori  yang berbeda dari user action. Sebuah event object
mempunyai tipe data mengenai salah satu dari class ini.


Pada  awalnya,  sebuah  listener  seharusnya  diregistrasikan  dengan  sebuah  source sehingga  dapat
menerima  informasi  tentang  event-event  yang  terjadi  pada  source tersebut. Hanya  listener  yang
sudah  teregistrasi  yang dapat menerima pemberitahuan event-event. Ketika  telah  teregistrasi, sebuah
listener hanya  tinggal menunggu sampai event terjadi.
Ketika  sesuatu  terjadi  dengan  event  source,  sebuah  event  object  akan  menguraikan event  yang
diciptakan.  Event  kemudian  ditembak  oleh  source  pada  listener  yang teregistrasi.
Saat  listener  menerima  sebuah  event  object  (pemberitahuan)  dari  source,  dia  akan  bekerja.
Menerjemahkan pemberitahuan dan memproses event yang terjadi.


Registrasi Listeners 

Event source mendaftarkan sebuah listener melalui method add<Type>Listener.
void add<Type>Listener(<Type>Listener listenerObj)
<Type>  tergantung  pada  tipe  dari  event  source.  Dapat  berupa  Key,  Mouse,  Focus, Component,
Action dan lainnya. Beberapa  listeners  dapat  diregistrasi  dengan  satu  event  source  untuk  menerima
pemberitahuan event.
Listener  yang  telah  teregistrasi  dapat  juga  tidak  diregistrasikan  lagi  menggunakan  method
remove<Type>Listener.
void remove<Type>Listener(<Type>Listener listenerObj)

Class-Class Event
Sebuah event object mempunyai sebuah class  event  sebagai  tipe data  acuannya. Akar  dari  hirarki
class  event  adalah  class  EventObject,  yang  dapat  ditemukan  pada  paket  java.util.  Immediate
subclass  dari  class  EventObject  adalah  class  AWTEvent.  Class AWTEvent  didefinisikan  pada  paket
java.awt.  Itu  merupakan  akar  dari  semua  AWT-based events.


Event Listeners 

Event  listeners  adalah  class  yang  mengimplementasikan  interfaces  <Type>Listener.


Petunjuk untuk Menciptakan Aplikasi Handling GUI Events

Berikut ini langkah-langkah yang Anda butuhkan untuk mengingat ketika ingin membuat aplikasi GUI dengan event handling.

1. Buatlah sebuah class yang menguraikan dan membuat suatu tampilan dari aplikasi
GUI Anda.

2. Buatlah sebuah class yang menerapkan interface listener yang sesuai. Class ini boleh
mengacu pada class yang sama seperti pada langkah awal.

3. Dalam menerapkan class, gunakan semua method-method dengan interface listener
yang sesuai. Uraikan masing-masing method bagaimana Anda ingin mengendalikan
event-event. Anda dapat memberikan implementasi kosong untuk method yang tidak
ingin Anda gunakan.

4. Daftarkan object listener, instansiatiate dari class listener pada langkah 2, dengan
source component menggunakan method add<Type>Listener.

Contoh Mouse Events
import java.awt.*;
import java.awt.event.*;
public class MouseEventsDemo extends Frame implements MouseListener, MouseMotionListener {
   TextField tf;
public MouseEventsDemo(String title){
      super(title);
tf = new TextField(60);
addMouseListener(this);
   }
public void launchFrame() {
      /* Menambah komponen pada frame */
add(tf, BorderLayout.SOUTH);
setSize(300,300);
setVisible(true);
   }
public void mouseClicked(MouseEvent me) {
      String msg = "Mouse clicked.";
tf.setText(msg);
   }
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);
   }
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);
   }
public static void main(String args[]) {
      MouseEventsDemo med = new MouseEventsDemo("Mouse Events Demo");
      med.launchFrame();
    }
}

Contoh Menutup 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);
   }
 
   public void windowActivated(WindowEvent e) {
}
public void windowClosed(WindowEvent e) {
}
public void windowClosing(WindowEvent e) {
      setVisible(false);
System.exit(0);
   }
public void windowDeactivated(WindowEvent e) {
}
public void windowDeiconified(WindowEvent e) {
}
public void windowIconified(WindowEvent e) {
}
public void windowOpened(WindowEvent e) {
}
public static void main(String args[]) {
      CloseFrame cf = new CloseFrame("Close Window Example");
      cf.launchFrame();
    }
}

Class-class Adapter Class 

Menerapkan semua method dari  interface  yang semuanya  akan membutuhkan banyak pekerjaan.  Di
satu  sisi,  Anda  terkadang  lebih  sering  tertarik  menerapkan  hanya beberapa method  dari  interface
saja.  Untungnya,  Java menyediakan  untuk  kita  class- class  adapter  yang menerapkan  semua
method  dari masing-masing  listener  interface dengan  lebih  dari  satu  method.  Implementasi  dari
method-method  semuanya  adalah kosong.


Close Window Example 


import java.awt.*;
import java.awt.event.*;
class CloseFrame extends Frame{
   Label label;
CFListener w = new CFListener(this);
 
   CloseFrame(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 CFListener extends WindowAdapter{
    CloseFrame ref;
CFListener( CloseFrame ref ){
  this.ref = ref;
}
 
    public void windowClosing(WindowEvent e) {
         ref.dispose();
System.exit(1);
   }
}

Inner Class dan Anonymous Inner Class
Bagian  ini  memberi  Anda  tinjauan  ulang  atas  konsep  yang  sudah  Anda  pelajari  di  pelajaran
pemrograman  pertama.  Inner  class  dan  anonymous  inner  class  sangatlah bermanfaat untuk GUI
event handling.

Inner Class 
Inner  class,  seperti  namanya,  adalah  sebuah  class  yang dideklarasikan  di dalam  class lain. Kegunaan
inner  classes  akan dapat membantu  Anda menyederhanakan  program,  terutama dalam event
handling seperti yang ditunjukkan pada contoh.


Contoh Menutup Window  
import java.awt.*;
import java.awt.event.*;
class CloseFrame extends Frame{
  Label label;
 
  CloseFrame(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 

Anonymous inner class adalah inner class tanpa nama. Kegunaan dari anonymous inner  class  akan
menyederhanakan  kode-kode  Anda  lebih  lanjut.  Di  bawah  ini  merupakan modifikasi dari contoh
bagian sebelumnya.


Contoh Menutup Window  
import java.awt.*;
import java.awt.event.*;
class CloseFrame extends Frame{
   Label label;
 
   CloseFrame(String title) {
      super(title);
label = new Label("Close the frame.");
this.addWindowListener(new WindowAdapter() {
        public void windowClosing(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();
    }
}

sumber : http://ratnokustiawan.files.wordpress.com






0 komentar:

Posting Komentar

Anda bertanya, saya akan mencoba menjawabnya ~,~

 

Blogger news

Blogroll