Kamis, 08 Maret 2012

Event Handling

Event Handling
Event berguna untuk menangani interaksi user dengan program, misalnya user memilih
sebuah menu dalam aplikasi MIDlet.Untuk menangani event perlu
mengimplementasikan interface CommandListener dan atau ItemListener.
CommandListener berfungsi untuk menangani jika user memilih Command tertentu
sedangkan ItemListener berfungsi untuk menangani jika user mengubah nilai seperti
misalnya mengubah pilihan pada ChoiceGroup.
Untuk memberikan gambaran sebuah event bekerja, perhatikan contoh berikut.




import javax.microedition.MIDlet.*;
import javax.microedition.lcdui.*;
public class NotHelloWorld2 extends MIDlet implements CommandListener{
private Command cmdExit;
private Display display;
public NotHelloWorld2()
{
display = Display.getDisplay(this);
cmdExit = new Command("Exit", Command.SCREEN,2);
}
public void startApp()
{
TextBox t = new TextBox("Not ","Not Hello World",256,0);
t.addCommand(cmdExit);
t.setCommandListener(this);
display.setCurrent(t);
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
public void commandAction(Command cmd,Displayable disp)
{
if(cmd==cmdExit)
{
destroyApp(false);
notifyDestroyed();
}
}
}
Pemrograman aplikasi wireless dengan Java/J2ME 24
Pada contoh kedua ini, kita tambahkan sebuah Command untuk keluar dari aplikasi
yang telah kita buat pada contoh 1. Ketika program pertama kali dipanggil, maka state
berada pada Aktif, disini sebuah TextBox dan Command dibuat. Kemudian program
menunggu respon dari user dengan mengimplementasikan CommandListener. Ketika
user menekan Command “cmdExit” , maka program memanggil
metodh(destroyApp) untuk membunuh MIDlet

GUI pada Java

 Graphical User Interface (GUI): 
 -Memberikan kemudahan kepada pengguna 
 -Terdiri dari komponen-komponen GUI  
 - Pengguna berinteraksi dengan komponen GUI melalui mouse, keyboard, dll.

 
Macam-macam GUI di Java :
- AWT (Abstract Window Toolkit)
- Swing (Lightweight, dibangun diatas AWT)
- SWT (buatan IBM)



 Pemrograman di console :

- Kontrol eksekusi program terpusat (user harus mengikuti alur yg sudah diprogram)
- Sequence, percabangan & pengulangan


  Event -driven programming :
- User menentukan apa yg ingin dilakukannya
- Komponen2 menunggu aksi/trigger dari user
- Komponen menghasilkan (fire) event 
- Event ditangani oleh Listener yg sudah 
- Event ditangani oleh Listener yg sudah  Event ditangani oleh Listener yg sudah 
  didaftarkan (di registrasi)


  Komponen-komponen GUI swing, diantaranya :
- button
- radio button 
- check box
- combo box
- menu
- label
- text field
- text pane
- text area

- list
- table
- tree
- slider
- tool tip
- progress bar
- color chooser
- file chooser
- panel
- split panel
- scroll panel
- tabbed pane
- toolbar

Stream, Reader, dan Writer

  Tanpa bisa berinteraksi dengan dunia lain, suatu program tidak ada gunanya. Interaksi suatu program dengan dunia lain sering disebut input/output atau I/O. Sejak dulu, salah satu tantangan terbesar untuk mendesain bahasa pemrograman baru adalah mempersiapkan fasilitas untuk melakukan input dan output. Komputer bisa terhubung dengan beragam jenis input dan output dari berbagai perangkat. Jika bahasa pemrograman harus dibuat secara khusus untuk setiap jenis perangkat, maka kompleksitasnya akan tak lagi bisa ditangani.
 Salah satu kemajuan terbesar dalam sejarah pemrograman adalah adanya konsep (atau abstraksi) untuk memodelkan perangkat I/O. Dalam Java, abstraksi ini disebut dengan aliran (stream). Bagian ini akan memperkenalkan tentang aliran, akan tetapi tidak menjelaskan dengan komplit. Untuk lebih lengkapnya, silakan lihat dokumen resmi Java.
Ketika berhubungan dengan input/output, kita harus ingat bahwa ada dua kategori data secara umum : data yang dibuat oleh mesin, dan data yang bisa dibaca manusia. Data yang dibuat mesin ditulis dengan model yang sama dengan bagaimana data tersebut disimpan di dalam komputer, yaitu rangkaian nol dan satu. Data yang bisa dibaca manusia adalah data dalam bentuk rangkaian huruf. Ketika kita membaca suatu bilangan 3.13159, kita membacanya sebagai rangkaian huruf yang kita terjemahkan sebagai angka. Angka ini akan ditulis dalam komputer sebagai rangkaian bit yang kita tidak mengerti.
 Untuk menghadapi kedua jenis data ini, Java memiliki dua kategori besar untuk aliran : aliran byte untuk data mesin (byte stream), dan aliran karakter (character stream) untuk data yang bisa dibaca manusia. Ada banyak kelas yang diturunkan dari kedua kategori ini.
 Setiap objek yang mengeluarkan data ke aliran byte masuk sebagai kelas turunan dari kelas abstrak OutputStream. Objek yang membaca data dari aliran byte diturunkan dari kelas abstrak InputStream. Jika kita menulis angka ke suatu OutputStream, kita tidak akan bisa membaca data tersebut karena ditulis dalam bahasa mesin. Akan tetapi data tersebut bisa dibaca kembali oleh InputStream. Proses baca tulis data akan menjadi sangat efisien, karena tidak ada penerjemahan yang harus dilakukan : bit yang digunakan untuk menyimpan data di dalam memori komputer hanya dikopi dari dan ke aliran tersebut.
Untuk membaca dan menulis data karakter yang bisa dimengerti manusia, kelas utamanya adalah Reader dan Writer. Semua kelas aliran karakter merupakan kelas turunan dari salah satu dari kelas abstrak ini. Jika suatu angka akan ditulis dalam aliran Writer, komputer harus bisa menerjemahkannya ke dalam rangkaian karakter yang bisa dibaca maunsia.
 Membaca angka dari aliran Reader menjadi variabel numerik juga harus diterjemahkan, dari deretan karakter menjadi rangkaian bit yang dimengerti komputer. (Meskipun untuk data yang terdiri dari karakter, seperti dari editor teks, masih akan ada beberapa terjemahan yang dilakukan. Karakter disimpan dalam komputer dalam nilai Unicode 16-bit. Bagi orang yang menggunakan alfabet biasa, data karakter biasanya disimpan dalam file dalam kode ASCII, yang hanya menggunakan 8-bit. Kelas Reader dan Writer akan menangani perubahan dari 16-bit ke 8-bit dan sebaliknya, dan juga menangani alfabet lain yang digunakan negara lain.)
 Adalah hal yang mudah untuk menentukan apakah kita harus menggunakan aliran byte atau aliran karakter. Jika kita ingin data yang kita baca/tulis untuk bisa dibaca manusia, maka kita gunakan aliran karakter. Jika tidak, gunakan aliran byte. System.in dan System.out sebenarnya adalah aliran byte dan bukan aliran karakter, karenanya bisa menangani input selain alfabet, misalnya tombol enter, tanda panah, escape, dsb.
 Kelas aliran standar yang akan dibahas berikutnya didefinisikan dalam paket java.io beserta beberapa kelas bantu lainnya. Kita harus mengimpor kelas-kelas tersebut dari paket ini jika kita ingin menggunakannya dalam program kita. Artinya dengan menggunakan "import java.io.*" di awal kode sumber kita.
 Aliran tidak digunakan dalam GUI, karena GUI memiliki aliran I/O tersendiri. Akan tetapi kelas-kelas ini digunakan juga untuk file atau komunikasi dalam jaringan. Atau bisa juga digunakan untuk komunikasi antar thread yang sedang bekerja secara bersamaan. Dan juga ada kelas aliran yang digunakan untuk membaca dan menulis data dari dan ke memori komputer.

Tipe-Tipe Stream pada Java

Dibawah ini adalah Tipe-TIpe Stream :
  1. Stream Karakter dan Byte
    Ada dua tipe Stream, yaitu stream karakter dan byte. Stream byte adalah abstraksi file atau alat untuk data biner sedangkan karakter adalah untuk karakter Unicode.

  2. Class InputStream
    adalah abstraksi class root untuk semua input stream byte sedangkan class OutputStream adalah class root abstraksi dari semua output stream byte. Untuk stream karakter, superclass yang sesuai dari semua class-class secara berturut-turut adalah class Reader dan the Writer. Kedua class-class ini adalah abstraksi class-class untuk membaca dan menulis stream karakter.


    Input dan Output Stream
    Stream juga dikategorikan berdasarkan apakah mereka digunakan untuk membaca atau menulis stream. Class InputStream dan class Reader adalah superclass-superclassdari semua input stream. Class OutputStream dan class Writer adalah class-class root dari semua output stream.

    Input stream juga dikenal sebagai stream sumber(source stream) sejak memperoleh informasi dari stream ini. sementara output stream disebut juga stream hasil(sink stream).

  3. Node dan Stream Filter
    Package java.io membedakan antara node dan stream filter. Sebuah stream node adalah sebuah stream dengan fungsi dasar berupa fungsi membaca atau menulis dari sebuah lokasi khusus seperti disk atau dari jaringan. Tipe-tipe dari stream node terdiri atas file, memory dan jalur data. Stream filter, di lain pihak, diletakkan pada layer stream node diantara threads atau proses untuk menyediakan fungsi tambahan yang tidak dapat ditemukan dalam stream node oleh stream node itu sendiri. Penambahan lapisan pada sebuah stream node disebut dengan stream chaining.

    Sesi ini berturut-turut mempunyai sebuah tujuan dari class-class stream yang berbeda., daftar dari class-class ini, pada dokumentasi Java's API.

Stream I/O

STREAM I/O
Pemrograman Berbasis Objek
Semua data di Java dibaca dan ditulis dengan menggunakan stream.
Stream adalah representasi abstrak dari aliran data yang berjalan dari 
sumber (input stream) ke tujuan (output stream).
Contoh:
-Membaca dan menulis file di dan ke harddisk
-Membaca dan menulis teks ke console.
-Membaca dan menulis melalui network

I/O Streams
Untuk membaca, program membuka stream pada sumber ( file, memory,socket,
dan membaca informasi secara sekuensial

Untuk menulis, program mengirim informasi ke tujuan dengan cara membuka
stream tujuan, selanjutnya menulis informasi secara sekuensial.

Streams
Byte stream (8 bit)
  digunakan untuk byte, integer, dan simple data type yang lain.
  Misal: numerical data, executable programs, dll
Character stream (16bitdigunakan untuk data tekstual (teks), mendukung
  unicode.
  Misal: text files

Byte Stream

Character Stream



Cara menggunakan stream
Prosedur penggunaan byte stream dan character stream sama
Input stream
1.Membuat obyek yg berasosiasi dg data source.
  Mis : FileInputStream
2.Membaca informasi dari stream dg menggunakan method obyek tsb.
  Mis: read()
3.Bila selesai, panggil method close.
Output stream
1.Membuat obyek yg berasosiasi dg data destination.
Mis : BufferedWriter
2.Menulis informasi ke stream tujuan dg menggunakan method obyek
tsb.
Mis: write()
3.Bila selesai, panggil method close.