12 Pengendali Peristiwa

1,142 views

Published on

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,142
On SlideShare
0
From Embeds
0
Number of Embeds
14
Actions
Shares
0
Downloads
26
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

12 Pengendali Peristiwa

  1. 1. Pengendali Peristiwa
  2. 2. Pengenalan <ul><li>Aturcara aplikasi/aplet yang ditulis sebelum ini lebih kepada teknik tradisional iaitu perlaksanannya secara berjujukan. </li></ul><ul><li>Aturcara dilarikan pada masa atau sehingga mencapai hasil yang ditetapkan. </li></ul><ul><li>Aturcara seperti amat susah untuk dihenti atau diuruskan semasa aturcara tersebut dilaksanakan. </li></ul><ul><li>Bagaimana untuk mengatasi masalah tersebut ? </li></ul>
  3. 3. Pengendali Peristiwa <ul><li>Pengguna perlu dikawal dalam mengendali aturcara </li></ul><ul><li>Aksi (action) pengguna terhadap aturcara untuk melakukan sesuatu: </li></ul><ul><ul><li>Butang ditekan </li></ul></ul><ul><ul><li>Tetikus diseret </li></ul></ul><ul><ul><li>Menekan kekunci keyboard </li></ul></ul><ul><li>Dari perspektif sistem, aksi ini dianggap sebagai peristiwa. </li></ul>
  4. 4. Pengendali Peristiwa <ul><li>Dalam aturcara pengendali peristiwa: </li></ul><ul><ul><li>Juruaturcara hanya perlu menentukan di mana, bagaimana dan bila sesuatu kelakuan atau proses aplikasi berlaku. </li></ul></ul><ul><ul><li>Juruaturcara tidak perlu menulis kod untuk mengesan bagaimana untuk “memerangkap” peristiwa – ianya dilakukan secara automatik. </li></ul></ul><ul><ul><li>Aliran perlaksanaan tidak berjujukan seperti yang ditetapkan dalam aturcara tradisional </li></ul></ul><ul><ul><li>Amat mudah untuk membatal, mengantung dan menganggu jujukan aturcara yang dilaksanakan. </li></ul></ul>
  5. 5. Sumber Peristiwa <ul><li>Sumber peristiwa dijana sama ada oleh pengguna luarana atau sistem pengoperasi (OS) </li></ul><ul><li>Sumber peristiwa pengguna </li></ul><ul><ul><li>Interkasi dengan komponen GUI. </li></ul></ul><ul><ul><ul><li>Cth: komponen Java Swing spt Jbutton, CheckBox, dll. </li></ul></ul></ul><ul><ul><li>Tetikus </li></ul></ul><ul><ul><li>Keyboard </li></ul></ul><ul><li>Sumber peristiwa OS </li></ul><ul><ul><li>Peristiwa peranti – New device found </li></ul></ul><ul><ul><li>Peristiwa masa – jam </li></ul></ul><ul><ul><li>Peristiwa rangkaian – Apabila kabel plug/unplug. </li></ul></ul>
  6. 6. Peristiwa dan Sumber Peristiwa <ul><li>Dalam Java, peristiwa diwakili sebagai objek. </li></ul><ul><li>Tiga kelas utama mengendali peristiwa </li></ul><ul><ul><li>Sumber peristiwa </li></ul></ul><ul><ul><ul><li>Komponen yang menjana peristiwa. </li></ul></ul></ul><ul><ul><ul><ul><li>Cth: mengklik-butang </li></ul></ul></ul></ul><ul><ul><li>Kelas pendengar </li></ul></ul><ul><ul><ul><li>Dalam kes mengklik butang, mesti ada suatu kelas yang boleh mendengar terdapat butang diklik. </li></ul></ul></ul><ul><ul><ul><ul><li>Cth: kelas ActionListener </li></ul></ul></ul></ul><ul><ul><li>Kelas Peristiwa </li></ul></ul><ul><ul><ul><li>Dalam kes mengklik butang, Setiap pendengar mempunyai parameter tertentu bagi mewakili peristiwa mengklik butang </li></ul></ul></ul><ul><ul><ul><ul><li>Cth: ActionEvent. </li></ul></ul></ul></ul>
  7. 7. Peristiwa dan Sumber Peristiwa <ul><li>Contoh Aksi pengguna, Sumber Objek, Jenis Peristiwa dan Kelas Pendengar </li></ul>ItemListener, ActionLsitener ItemEvent, ActionEvent JCheckBox Klik check box ListSelectionListener ListSelectionEvent JList Pilih item ItemListener, ActionListener ItemEvent, ActionEvent JComboBox Pilih item baru ActionListener ActionEvent JButton Klik Butang Kelas Pendengar Jenis Peristiwa Sumber Objek Aksi Pengguna
  8. 8. Peristiwa dan Sumber Peristiwa <ul><li>Contoh Aksi pengguna, Sumber Objek, Jenis Peristiwa dan Kelas Pendengar </li></ul>MouseListener MouseEvent Component Klik tetikus,… AdjustmentListener AdjustmentEvent JScrollBar Gerak palang skrol ActionListener ActionEvent JTextField Tekan enter dlm medan teks ItemListener, ActionListener ItemEvent, ActionEvent JRadioButton Klik butang radio Kelas Pendengar Jenis Peristiwa Sumber Objek Aksi Pengguna
  9. 9. Model Deligasi Peristiwa <ul><li>Java 1.1 dan 1.2 menggunakan model deligasi peristiwa (MDP) yang lebih baik berbanding dengan model pewarisan peristiwa Java 1.0. </li></ul><ul><li>Dalam MDP, pengguna mencetuskan peristiwa ke atas sumber objek; Sumber objek menjana objek peristiwa dan memanggil objek pengendali pendengar untuk memproses peristiwa. </li></ul><ul><li>Dalam MDP sumber objek mestilah didaftar. </li></ul>
  10. 10. Model Deligasi Peristiwa
  11. 11. Melaksana Model MDP <ul><li>Tiga langkah utama </li></ul><ul><ul><li>Menyediakan aturcara sebagai pendengar peristiwa dengan menambah antaramuka. </li></ul></ul><ul><ul><li>Mendaftar komponen pada pendengar peristiwa </li></ul></ul><ul><ul><li>Melakukan tindakan terhadap peristiwa pengguna. </li></ul></ul><ul><li>Nota : Komponen boleh mempunyai lebih daripada satu pendengar peristiwa. </li></ul>
  12. 12. Langkah 1 <ul><li>Menyediakan aturcara sebagai pendengar peristiwa dengan menambah antaramuka. </li></ul><ul><li>Mengimport antaramuka pendengar. </li></ul><ul><ul><li>import java.awt.event.*; </li></ul></ul><ul><li>Menambah antaramuka pendengar pada kelas pendendali peristiwa pengguna. </li></ul><ul><ul><li>Contoh menambah antaramuka pendengar bagi sumber objek JButton. </li></ul></ul><ul><ul><li>public class myPengendali extends JApplet implements ActionListener { ..} </li></ul></ul>
  13. 13. Langkah 2 <ul><li>Mendaftar komponen pada pendengar peristiwa. </li></ul><ul><li>Kita perlu mendaftar objek JButton pada objek pendengar peristiwa untuk membolehkan peristiwa yang berlaku didengar menggunakan metod: </li></ul><ul><ul><li>addActionListener(ActionListener) </li></ul></ul><ul><li>Contoh : </li></ul><ul><li>JButton kira = new JButton(“Kira”); </li></ul><ul><li>kira.addActionListener(this); </li></ul>
  14. 14. Langkah 3 <ul><li>Mengendali Peristiwa Pengguna </li></ul><ul><li>Metod pengendali peristiwa pengguna bergantung kepada jenis antaramuka pendengar yang digunakan. </li></ul><ul><li>Contoh jika pendengar ActionListener digunakan maka metod </li></ul><ul><ul><li>public void actionPerformed(ActionEvent e ) { </li></ul></ul><ul><ul><li>… } </li></ul></ul><ul><li>akan dipanggil apabila peristiwa berlaku. </li></ul>
  15. 15. Contoh Aturcara mudah <ul><li>public class myPengendali extends JApplet </li></ul><ul><ul><li>implements ActionListener { // Menambah pendengar – langkah 1 </li></ul></ul><ul><ul><li>public void init () </li></ul></ul><ul><ul><ul><li>Container pane = getContentPane(); </li></ul></ul></ul><ul><ul><ul><li>JButton kira = new JButton(“Klik Saya”); </li></ul></ul></ul><ul><ul><ul><li>Button.addActionListener(this); // mendaftar komponen – langkah 2 </li></ul></ul></ul><ul><li>pane.add(kira); </li></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>public void actionPerformed(ActionEvent e) { </li></ul></ul><ul><ul><ul><li>//mengendali peristiwa – langkah 3 </li></ul></ul></ul><ul><ul><ul><li>System.out.println(“Miaww…”); </li></ul></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>} </li></ul>Nota: Metod getSource() atau getActionCommand() boleh digunakan bagi kelas ActionEvent untuk memperolehi identiti bagi sumber objek yang mencetus peristiwa.
  16. 16. Masalah 1 <ul><li>Papar butang OK dan Cancel pada tetingkap. </li></ul><ul><li>Apabila butang ditekan, mesej akan dipaprkan pada skrin konsol. Contoh output aturcara </li></ul>
  17. 17. <ul><li>// TestActionEvent.java: Test ActionEvent </li></ul><ul><li>import javax.swing.*; </li></ul><ul><li>import java.awt.*; </li></ul><ul><li>import java.awt.event.*; </li></ul><ul><li>public class TestActionEvent extends JFrame implements ActionListener{ </li></ul><ul><li>// Create two buttons </li></ul><ul><li>private JButton jbtOk = new JButton( &quot;OK&quot; ); </li></ul><ul><li>private JButton jbtCancel = new JButton( &quot;Cancel&quot; ); </li></ul><ul><li>/** Default constructor */ </li></ul><ul><li>public TestActionEvent() { </li></ul><ul><li>// Set the window title </li></ul><ul><li>setTitle( &quot;TestActionEvent&quot; ); </li></ul><ul><li>// Set FlowLayout manager to arrange the components </li></ul><ul><li>// inside the frame </li></ul><ul><li>getContentPane().setLayout( new FlowLayout()); </li></ul>
  18. 18. <ul><li>// Add buttons to the frame </li></ul><ul><li>getContentPane().add(jbtOk); </li></ul><ul><li>getContentPane().add(jbtCancel); </li></ul><ul><li>// Register listeners </li></ul><ul><li>jbtOk.addActionListener(this); </li></ul><ul><li>jbtCancel.addActionListener(this); </li></ul><ul><li>} </li></ul><ul><li>/** This method will be invoked when a button is clicked */ </li></ul><ul><li>public void actionPerformed(ActionEvent e) { </li></ul><ul><li>if (e.getActionCommand().equals( &quot;OK&quot; )) { </li></ul><ul><li>System.out.println( &quot;The OK button is clicked&quot; ); </li></ul><ul><li>} </li></ul><ul><li>else if (e.getActionCommand().equals( &quot;Cancel&quot; )) { </li></ul><ul><li>System.out.println( &quot;The Cancel button is clicked&quot; ); </li></ul><ul><li>} </li></ul>
  19. 19. <ul><li>/** Main method */ </li></ul><ul><li>public static void main(String[] args) { </li></ul><ul><li>TestActionEvent frame = new TestActionEvent(); </li></ul><ul><li>frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); </li></ul><ul><li>frame.setSize( 100 , 80 ); </li></ul><ul><li>frame.setVisible(true); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  20. 20. Masalah 2 <ul><li>Mengira indeks berat badan berdasarkan formula berikut: </li></ul><ul><li>indeks berat badan = berat (kg) / tingg(m) 2 </li></ul><ul><li>Nilai berat badan dan tinggi perlu diinput pada medan teks. </li></ul><ul><li>Untuk mengira indeks berat badan perlu mengklik suatu butang. </li></ul><ul><li>Output aturcara seperti di bawah: </li></ul>
  21. 21. <ul><li>import java.awt.event.*; </li></ul><ul><li>import java.awt.*; </li></ul><ul><li>import javax.swing.*; </li></ul><ul><li>public class FrameIndexBeratBadan extends JFrame implements ActionListener { </li></ul><ul><li>private JLabel berat, tinggi, output; </li></ul><ul><li>private JButton kira; </li></ul><ul><li>private JTextField inpBerat, inpTinggi; </li></ul><ul><li>public FrameIndexBeratBadan() </li></ul><ul><li>{ </li></ul><ul><li>Container pane = getContentPane(); </li></ul><ul><li>pane.setLayout( new FlowLayout()); </li></ul><ul><li>berat = new JLabel( &quot;Masukan berat (kg)&quot; ); </li></ul><ul><li>pane.add(berat); </li></ul><ul><li>inpBerat = new JTextField( 10 ); </li></ul><ul><li>pane.add(inpBerat); </li></ul><ul><li>tinggi = new JLabel( &quot;Masukan tinggi (m)&quot; ); </li></ul><ul><li>pane.add(tinggi); </li></ul><ul><li>inpTinggi = new JTextField( 10 ); </li></ul><ul><li>pane.add(inpTinggi); </li></ul><ul><li>kira = new JButton( &quot;kira&quot; ); </li></ul><ul><li>kira.addActionListener( this ); // // Register the button as listeners </li></ul><ul><li>pane.add(kira); </li></ul><ul><li>output = new JLabel(); </li></ul><ul><li>pane.add(output); </li></ul><ul><li>} </li></ul>
  22. 22. <ul><li>public void actionPerformed(ActionEvent e) </li></ul><ul><li>{ </li></ul><ul><li>String s1,s2; </li></ul><ul><li>Double nilai1,nilai2; </li></ul><ul><li>double nilaiBerat, nilaiTinggi, indeksBB; </li></ul><ul><li>s1 = inpBerat.getText(); </li></ul><ul><li>s2 = inpTinggi.getText(); </li></ul><ul><li>nilai1 = new Double(s1); </li></ul><ul><li>nilai2 = new Double(s2); </li></ul><ul><li>nilaiBerat = nilai1.doubleValue(); </li></ul><ul><li>nilaiTinggi = nilai2.doubleValue(); </li></ul><ul><li>indeksBB = kiraIndeksBB(nilaiBerat, nilaiTinggi); </li></ul><ul><li>output.setText( &quot;Index Berat Badan Anda ialah :&quot; + indeksBB); </li></ul><ul><li>} </li></ul><ul><li>private double kiraIndeksBB( double b, double t) </li></ul><ul><li>{ </li></ul><ul><li>return (b/Math.pow(t, 2 )); </li></ul><ul><li>} </li></ul>
  23. 23. <ul><li>/** Main method */ </li></ul><ul><li>public static void main(String[] args) { </li></ul><ul><li>FrameIndexBeratBadan frame = new FrameIndexBeratBadan(); </li></ul><ul><li>frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); </li></ul><ul><li>frame.setSize( 700 , 100 ); </li></ul><ul><li>frame.setVisible(true); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  24. 24. Mengendali Peristiwa (sambungan) <ul><li>Pendengar menunjuk minat untuk mengendali peristiwa dengan memanggil metod addXXXListener() pada suatu komponen: </li></ul><ul><ul><li>add Action Listener(ActionListener l) </li></ul></ul><ul><ul><li>add Item Listener (ItemListener l) </li></ul></ul><ul><ul><li>add Window Listener ( WindowListener l) </li></ul></ul><ul><li>ActionListener, ItemListener dan WindowListener merupakan suatu antaramuka (interface) dalam Java. </li></ul><ul><li>Jadi, sebarang kelas boleh ditulis sebagai pendengar dengan melaksanakan antaramuka yang bersesuaian. </li></ul>
  25. 25. Pendengar (sambungan) <ul><li>Pendengar dan peristiwa adalah sebahagian daripada pakej java.awt.event </li></ul><ul><li>Pendengar merupakan suatu interface yang ditakrifkan seperti berikut: </li></ul><ul><ul><ul><li>public interface ActionListener { </li></ul></ul></ul><ul><ul><ul><li>public void actionPerformed (ActionEvent e); </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><li>public interface ItemListener { </li></ul><ul><ul><ul><li>public void itemStateChanged (ItemEvent e); </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><li>Jadi sebarang kelas melaksanakan antaramuka pendengar mesti membatalkan metod yang terdapat dalam antaramuka tersebut. </li></ul>
  26. 26. Pengendali peristiwa (sambungan) <ul><li>Bertindak balas kepada peristiwa secara automatik. </li></ul><ul><li>Contoh: </li></ul><ul><ul><li>actionPerformed() secara automatik dipanggil apabila pengguna mengklik butang (JButton). </li></ul></ul><ul><ul><li>adjusmentValueChanged() secara automatik dipanggil apabila palang skrol (JScrollBar) diubah. </li></ul></ul><ul><ul><li>itemStateChanged() pula secara automatik dipanggil apabila memilih item dalam kotak pilihan (JCheckBox) </li></ul></ul>
  27. 27. Amalan Pengaturcaraa berasaskan peristiwa <ul><li>Terlupa tambah kelas pendengar menyebab berlaku ralat </li></ul><ul><li>Terlupa panggil metod pengendali peristiwa menyebab berlaku ralat. </li></ul><ul><li>Jangan guna container sebagai pendengar peristiwa. (Cuba ubah suai aturcara masalah1 dan masalah 2 untuk memenuhi tuntutan ini) </li></ul><ul><li>Berkongsi kelas pendengar, bukannya objek pendengar. Pengguna arahan berikut perlu dielak. </li></ul><ul><ul><li> public void actionPerformed(ActionEvent event) </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><ul><ul><li>Object source = event.getSource(); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>If( source == okButton ) …. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>else if( source == canceButton ) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>… </li></ul></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul>
  28. 28. Latihan : K alkulator mudah <ul><li>Tulis aturcara yang mengira dan memaparkan jawapan operasi asas matematik seperti antaramuka di bawah: </li></ul>12*(7.5-1)+5 = Clear 7 9 4 0 2 1 5 3 6 8 / * + - ( ) .

×