12 pengendali peristiwa

28
Pengendali Peristiwa

Upload: madzani-nusa

Post on 18-Dec-2014

928 views

Category:

Technology


4 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 12   Pengendali Peristiwa

Pengendali Peristiwa

Page 2: 12   Pengendali Peristiwa

Pengenalan

Aturcara aplikasi/aplet yang ditulis sebelum ini lebih kepada teknik tradisional iaitu perlaksanannya secara berjujukan.

Aturcara dilarikan pada masa atau sehingga mencapai hasil yang ditetapkan.

Aturcara seperti amat susah untuk dihenti atau diuruskan semasa aturcara tersebut dilaksanakan.

Bagaimana untuk mengatasi masalah tersebut ?

Page 3: 12   Pengendali Peristiwa

Pengendali Peristiwa

Pengguna perlu dikawal dalam mengendali aturcara

Aksi (action) pengguna terhadap aturcara untuk melakukan sesuatu: Butang ditekan Tetikus diseret Menekan kekunci keyboard

Dari perspektif sistem, aksi ini dianggap sebagai peristiwa.

Page 4: 12   Pengendali Peristiwa

Pengendali Peristiwa

Dalam aturcara pengendali peristiwa: Juruaturcara hanya perlu menentukan di mana,

bagaimana dan bila sesuatu kelakuan atau proses aplikasi berlaku.

Juruaturcara tidak perlu menulis kod untuk mengesan bagaimana untuk “memerangkap” peristiwa – ianya dilakukan secara automatik.

Aliran perlaksanaan tidak berjujukan seperti yang ditetapkan dalam aturcara tradisional

Amat mudah untuk membatal, mengantung dan menganggu jujukan aturcara yang dilaksanakan.

Page 5: 12   Pengendali Peristiwa

Sumber Peristiwa

Sumber peristiwa dijana sama ada oleh pengguna luarana atau sistem pengoperasi (OS)

Sumber peristiwa pengguna Interkasi dengan komponen GUI.

Cth: komponen Java Swing spt Jbutton, CheckBox, dll. Tetikus Keyboard

Sumber peristiwa OS Peristiwa peranti – New device found Peristiwa masa – jam Peristiwa rangkaian – Apabila kabel plug/unplug.

Page 6: 12   Pengendali Peristiwa

Peristiwa dan Sumber Peristiwa Dalam Java, peristiwa diwakili sebagai objek. Tiga kelas utama mengendali peristiwa

Sumber peristiwa Komponen yang menjana peristiwa.

Cth: mengklik-butang

Kelas pendengar Dalam kes mengklik butang, mesti ada suatu kelas yang

boleh mendengar terdapat butang diklik. Cth: kelas ActionListener

Kelas Peristiwa Dalam kes mengklik butang, Setiap pendengar mempunyai

parameter tertentu bagi mewakili peristiwa mengklik butang Cth: ActionEvent.

Page 7: 12   Pengendali Peristiwa

Peristiwa dan Sumber Peristiwa

Contoh Aksi pengguna, Sumber Objek, Jenis Peristiwa dan Kelas Pendengar

Aksi Pengguna Sumber Objek Jenis Peristiwa Kelas Pendengar

Klik Butang JButton ActionEvent ActionListener

Pilih item baru JComboBox ItemEvent, ActionEvent

ItemListener, ActionListener

Pilih item JList ListSelectionEvent ListSelectionListener

Klik check box JCheckBox ItemEvent, ActionEvent

ItemListener, ActionLsitener

Page 8: 12   Pengendali Peristiwa

Peristiwa dan Sumber Peristiwa

Contoh Aksi pengguna, Sumber Objek, Jenis Peristiwa dan Kelas Pendengar

Aksi Pengguna Sumber Objek Jenis Peristiwa Kelas Pendengar

Klik butang radio JRadioButton ItemEvent, ActionEvent

ItemListener, ActionListener

Tekan enter dlm medan teks

JTextField ActionEvent ActionListener

Gerak palang skrol JScrollBar AdjustmentEvent AdjustmentListener

Klik tetikus,… Component MouseEvent MouseListener

Page 9: 12   Pengendali Peristiwa

Model Deligasi Peristiwa

Java 1.1 dan 1.2 menggunakan model deligasi peristiwa (MDP) yang lebih baik berbanding dengan model pewarisan peristiwa Java 1.0.

Dalam MDP, pengguna mencetuskan peristiwa ke atas sumber objek; Sumber objek menjana objek peristiwa dan memanggil objek pengendali pendengar untuk memproses peristiwa.

Dalam MDP sumber objek mestilah didaftar.

Page 10: 12   Pengendali Peristiwa

Model Deligasi Peristiwa

Page 11: 12   Pengendali Peristiwa

Melaksana Model MDP

Tiga langkah utama Menyediakan aturcara sebagai pendengar peristiwa

dengan menambah antaramuka. Mendaftar komponen pada pendengar peristiwa Melakukan tindakan terhadap peristiwa pengguna.

Nota : Komponen boleh mempunyai lebih daripada satu pendengar peristiwa.

Page 12: 12   Pengendali Peristiwa

Langkah 1

Menyediakan aturcara sebagai pendengar peristiwa dengan menambah antaramuka.

Mengimport antaramuka pendengar. import java.awt.event.*;

Menambah antaramuka pendengar pada kelas pendendali peristiwa pengguna. Contoh menambah antaramuka pendengar bagi

sumber objek JButton.public class myPengendali extends JApplet implements ActionListener { ..}

Page 13: 12   Pengendali Peristiwa

Langkah 2

Mendaftar komponen pada pendengar peristiwa. Kita perlu mendaftar objek JButton pada objek

pendengar peristiwa untuk membolehkan peristiwa yang berlaku didengar menggunakan metod: addActionListener(ActionListener)

Contoh :JButton kira = new JButton(“Kira”);kira.addActionListener(this);

Page 14: 12   Pengendali Peristiwa

Langkah 3

Mengendali Peristiwa Pengguna Metod pengendali peristiwa pengguna

bergantung kepada jenis antaramuka pendengar yang digunakan.

Contoh jika pendengar ActionListener digunakan maka metod

public void actionPerformed(ActionEvent e ) {…}

akan dipanggil apabila peristiwa berlaku.

Page 15: 12   Pengendali Peristiwa

Contoh Aturcara mudahpublic class myPengendali extends JApplet

implements ActionListener { // Menambah pendengar – langkah 1

public void init ()Container pane = getContentPane();JButton kira = new JButton(“Klik Saya”);Button.addActionListener(this); // mendaftar komponen – langkah 2pane.add(kira);

}public void actionPerformed(ActionEvent e) {

//mengendali peristiwa – langkah 3System.out.println(“Miaww…”);

}}

Nota: Metod getSource() atau getActionCommand() boleh digunakan bagi kelas ActionEvent untuk memperolehi identiti bagi sumber objek yang mencetus peristiwa.

Page 16: 12   Pengendali Peristiwa

Masalah 1

Papar butang OK dan Cancel pada tetingkap. Apabila butang ditekan, mesej akan dipaprkan

pada skrin konsol. Contoh output aturcara

Page 17: 12   Pengendali Peristiwa

// TestActionEvent.java: Test ActionEventimport javax.swing.*;import java.awt.*;import java.awt.event.*;

public class TestActionEvent extends JFrame implements ActionListener{

// Create two buttons private JButton jbtOk = new JButton("OK"); private JButton jbtCancel = new JButton("Cancel");

/** Default constructor */ public TestActionEvent() { // Set the window title setTitle("TestActionEvent");

// Set FlowLayout manager to arrange the components // inside the frame getContentPane().setLayout(new FlowLayout());

Page 18: 12   Pengendali Peristiwa

// Add buttons to the frame getContentPane().add(jbtOk); getContentPane().add(jbtCancel);

// Register listeners jbtOk.addActionListener(this); jbtCancel.addActionListener(this); }

/** This method will be invoked when a button is clicked */ public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("OK")) { System.out.println("The OK button is clicked"); } else if (e.getActionCommand().equals("Cancel")) { System.out.println("The Cancel button is clicked"); }

Page 19: 12   Pengendali Peristiwa

/** Main method */ public static void main(String[] args) { TestActionEvent frame = new TestActionEvent(); frame.setDefaultCloseOperation(

JFrame.EXIT_ON_CLOSE); frame.setSize(100, 80); frame.setVisible(true); }}

Page 20: 12   Pengendali Peristiwa

Masalah 2

Mengira indeks berat badan berdasarkan formula berikut:indeks berat badan = berat (kg) / tingg(m)2

Nilai berat badan dan tinggi perlu diinput pada medan teks. Untuk mengira indeks berat badan perlu mengklik suatu butang.Output aturcara seperti di bawah:

Page 21: 12   Pengendali Peristiwa

import java.awt.event.*;import java.awt.*;import javax.swing.*;

public class FrameIndexBeratBadan extends JFrame implements ActionListener { private JLabel berat, tinggi, output; private JButton kira; private JTextField inpBerat, inpTinggi; public FrameIndexBeratBadan() { Container pane = getContentPane(); pane.setLayout(new FlowLayout()); berat = new JLabel("Masukan berat (kg)"); pane.add(berat); inpBerat = new JTextField(10); pane.add(inpBerat); tinggi = new JLabel("Masukan tinggi (m)"); pane.add(tinggi); inpTinggi = new JTextField(10); pane.add(inpTinggi); kira = new JButton("kira"); kira.addActionListener(this); // // Register the button as listeners pane.add(kira); output = new JLabel(); pane.add(output); }

Page 22: 12   Pengendali Peristiwa

public void actionPerformed(ActionEvent e) { String s1,s2; Double nilai1,nilai2; double nilaiBerat, nilaiTinggi, indeksBB; s1 = inpBerat.getText(); s2 = inpTinggi.getText(); nilai1 = new Double(s1); nilai2 = new Double(s2);

nilaiBerat = nilai1.doubleValue(); nilaiTinggi = nilai2.doubleValue(); indeksBB = kiraIndeksBB(nilaiBerat, nilaiTinggi); output.setText("Index Berat Badan Anda ialah :"+ indeksBB);

} private double kiraIndeksBB(double b, double t) { return (b/Math.pow(t,2)); }

Page 23: 12   Pengendali Peristiwa

/** Main method */ public static void main(String[] args) { FrameIndexBeratBadan frame = new

FrameIndexBeratBadan(); frame.setDefaultCloseOperation(

JFrame.EXIT_ON_CLOSE); frame.setSize(700, 100); frame.setVisible(true); }}

Page 24: 12   Pengendali Peristiwa

Mengendali Peristiwa (sambungan) Pendengar menunjuk minat untuk mengendali

peristiwa dengan memanggil metod addXXXListener() pada suatu komponen: addActionListener(ActionListener l) addItemListener (ItemListener l) addWindowListener ( WindowListener l)

ActionListener, ItemListener dan WindowListener merupakan suatu antaramuka (interface) dalam Java.

Jadi, sebarang kelas boleh ditulis sebagai pendengar dengan melaksanakan antaramuka yang bersesuaian.

Page 25: 12   Pengendali Peristiwa

Pendengar (sambungan) Pendengar dan peristiwa adalah sebahagian

daripada pakej java.awt.event Pendengar merupakan suatu interface yang

ditakrifkan seperti berikut:public interface ActionListener { public void actionPerformed(ActionEvent e);}

public interface ItemListener { public void itemStateChanged(ItemEvent e);}

Jadi sebarang kelas melaksanakan antaramuka pendengar mesti membatalkan metod yang terdapat dalam antaramuka tersebut.

Page 26: 12   Pengendali Peristiwa

Pengendali peristiwa (sambungan)

Bertindak balas kepada peristiwa secara automatik.

Contoh: actionPerformed() secara automatik dipanggil apabila

pengguna mengklik butang (JButton). adjusmentValueChanged() secara automatik

dipanggil apabila palang skrol (JScrollBar) diubah. itemStateChanged() pula secara automatik dipanggil

apabila memilih item dalam kotak pilihan (JCheckBox)

Page 27: 12   Pengendali Peristiwa

Amalan Pengaturcaraa berasaskan peristiwa

Terlupa tambah kelas pendengar menyebab berlaku ralat Terlupa panggil metod pengendali peristiwa menyebab

berlaku ralat. Jangan guna container sebagai pendengar peristiwa. (Cuba

ubah suai aturcara masalah1 dan masalah 2 untuk memenuhi tuntutan ini)

Berkongsi kelas pendengar, bukannya objek pendengar. Pengguna arahan berikut perlu dielak.

public void actionPerformed(ActionEvent event){

Object source = event.getSource();If( source == okButton ) ….else if( source == canceButton )

…}

Page 28: 12   Pengendali Peristiwa

Latihan : Kalkulator mudah Tulis aturcara yang mengira dan

memaparkan jawapan operasi asas matematik seperti antaramuka di bawah:

12*(7.5-1)+5

7 9

4

0

21

5

3

6

8

/

*

+

-

( )

. =

Clear