Artikel ini ditulis untuk membantu anda dalam mengerjakan tugas ke empat dan akan memberikan beberapa hal. Topik-topik yang akan dibicarakan di dalam artikel ini adalah:
Sudah barang tentu bagi sebagian dari anda yang sudah memahami pemrograman applet + GUI anda tidak perlu membacanya. Kerangka program yang dibahas pun hanyalah suatu contoh yang tidak harus diikuti.
Java menyediakan lingkungan pemrograman applet yang menghasilkan suatu komponen web yang dapat ditampilkan di dalam file HTML anda dan di browse dari mana saja melalui internet. Di dalam file HTML anda membuat suatu tag line, contohnya:
... untuk menyatakan parameter-parameter dari applet
</applet>
Struktur program applet berbeda dengan program application biasa. Program application biasanya berisikan suatu kelas utama yang di dalamnya terdapat suatu method yang bernama main(String [] arg) dengan ragam public dan static. Java interpreter setelah loading kelas ini akan jump untuk mengeksekusi program mulai dari metoda ini lalu mengikuti flow proses yang ada di dalamnya.
Sementara, dalam applet method main tersebut tidak ada. Pada dasarnya program applet merupakan subclass dari kelas Applet yang di dalamnya sudah terdapat sejumlah method yang akan dioverrid di dalam applet anda. Ada 2 metoda yang biasanya dioverrid.
void init()
void paint(Graphics g)
init()
dan paint(Graphics g)
tidak di-overrid)
berikut ini sudah akan bisa dijalankan browser:
// engga ada apa-apanya disini
}
paint(Graphics g)
:
paint(Graphics g)
dijalankan:
public void init(){
public void paint(Graphics g) {
count++;
Pertanyaan: jika paint(Graphics g)
secara otomatis dipanggil oleh
sistem, maka bagaimana jika kita melakukan pengubahan pada
applet dan ingin segera ditampilkan?
Jawab: kita bisa memanggil metoda repaint()
(suatu metoda yang
sudah ada dalam applet) dan di dalam repaint()
itu
pemanggilan ke metoda paint(Graphics g)
dilakukan. Kita
akan melihat contohnya saat pembahasan GUI dengan applet.
java.awt.*
(awt=Advance Widget Toolkit). Aplikasinya amat mudah:
Kedua hal tersebut dilakukan di dalam metoda init()
(atau metoda yang dipanggil di dalam init()
tersebut).
this.setLayout(...)
(prefiks this.
bisa dihilangkan!) dipanggil dengan "..."
diisi:
null
(ditulis setLayout(null)
):setLayout(new BorderLayout())
): setLayout(new FlowLayout())
): Bisa juga kita definisikan layout yang lebih kompleks secara hirarkis dengan mengcreate suatu komponen Panel. Panel sendiri adalah suatu komponen yang mana di atasnya bisa ditempatkan komponen-komponen lain. Setelah membahas komponen akan diberi contoh mengenai layout dan layout kompleks tsb.
Jika suatu komponen telah dicreate maka ia harus ditempatkan
pada applet (sesuai dengan layout ybs.), atau suatu Panel dalam
applet tersebut dengan perintah this.add(
Jika kita menggunakan layout tertentu maka kita tidak perlu
mendefinisikan secara eksplisit koordinat (x,y) dari komponen-
komponen tsb. Misalnya jika kita gunakan FlowLayout maka
Maka, komponen-komponen akan ditempatkan secara otomatis pada
applet.
Kita bisa mendefinisikan suatu Listener jika terjadi event pada
komponen TextField, misalnya setiap pengetikan karakter. Tapi
biasanya komponen TextField baru direspons setelah kita selesai
mengetikan suatu string kepadanya. Jadi yang terpenting adalah
bagaimana kita membaca string yang diketikkan padanya.
Kita bisa mengakses teks yang diketikkan tersebut dengan metoda
field.getText() dengan field adalah obyek TextField ybs.
Contohnya pada CountingApplet2 di atas operasi mereset counter
adalah melakukan pengisian count dengan harga yang diberikan
pada inputTeks.
Applet dapat langsung menerima aksi dari mouse (tanpa melalui
komponen-komponennya) dengan mendefinisilan MouseListener mirip
di atas (kecuali di atas Listener dikaitkan dengan resetButton).
Jadi tambahkan di dalam init() didefinisikan respons pada
penekanan/pelepasan tombol mouse di atas applet:
Sementara, untuk melakukan dragging maka diimplementasikan
MouseMotionListener sbb.:
Note: variabel yang diakses metoda di dalam suatu Listener
walaupun dicode di dalam metoda init() namun tetap dieksekusi
sepertinya ada di luar init(). Jadi semua variabel (kecuali
yang lokal di dalam metoda listener itu) harus dideklarasikan
pada applet (bukan pada init().
Contoh:
pada CountingApplet0 ditambahkan suatu button untuk
mereset variabel count (tapi event handlernya belum ada jadi
operasi reset belum dapat dilakukan) dan suatu textfield
untuk menerima masukan:
Button resetButton;
Label startLabel;
TextField inputTeks;
public void init(){
this.setLayout(null);
// create button reset
resetButton = new Button("Reset");
resetButton.setBounds(20,20,50,30);
this.add(resetButton);
// create label untuk TextField
startLabel = new Label("Start Dari");
startLabel.setBounds(70,20,50,30);
this.add(startLabel);
// create TextField
inputTeks = new TextField();
inputTeks.setBounds(120,20,50,30);
this.add(inputTeks);
}
public void paint(Graphics g) {
count++;init()
kita modifikasi:
this.setLayout(new FlowLayout());
// create button reset
resetButton = new Button("Reset");
this.add(resetButton);
// create label untuk TextField
startLabel = new Label("Start Dari");
this.add(startLabel);
// create TextField
inputTeks = new TextField(" ");
this.add(inputTeks);2.3. Pendefinisian Event-handler
Applet di atas sudah bisa dijalankan namun komponen-komponen
tersebut belum berfungsi karena kita belum mendefinisikan
bagaimana caranya menangani event yang dikenakan kepadanya.
Dalam Java digunakan istilah Listener. Masing-masing jenis
komponen kita mendefinisikan Listener-nya.
Misalnya untuk obyek Button: kita perlu
Contoh:
Dari applet CountingApplet1 di atas kita definisikan
respons yang akan terjadi jika Button resetButton diklik.
Button resetButton;
Label startLabel;
TextField inputTeks;
public void init(){
this.setLayout(null);
// create button reset
resetButton = new Button("Reset");
resetButton.setBounds(20,20,50,30);
this.add(resetButton);
// mengkaitkan dengan Listenernya
resetButton.addActionListener(
repaint();
// create label untuk TextField
startLabel = new Label("Start Dari");
startLabel.setBounds(70,20,50,30);
this.add(startLabel);
// create TextField
inputTeks = new TextField();
inputTeks.setBounds(120,20,50,30);
this.add(inputTeks);
public void paint(Graphics g) {
count++;
Button resetButton;
Label startLabel;
TextField inputTeks;
public void init(){
this.setLayout(null);
// create button reset
resetButton = new Button("Reset");
resetButton.setBounds(20,20,50,30);
this.add(resetButton);
// mengkaitkan dengan Listenernya
resetButton.addActionListener(
count = Integer.parseInt(s);
catch(NumberFormatException e) {
repaint();
// create label untuk TextField
startLabel = new Label("Start Dari");
startLabel.setBounds(70,20,80,30);
this.add(startLabel);
// create TextField
inputTeks = new TextField();
inputTeks.setBounds(150,20,50,30);
this.add(inputTeks);
public void paint(Graphics g) {
g.drawString("Telah digambarkan ke-"+count+" kali",10,80);
// mouse ditekan di atas applet
public void mouseReleased(MouseEvent e) {
// mouse direlease di atas applet
// beberapa aksi pada mouse lainnya dapat
// didefinisikan berikutnya
Untuk melengkapi contoh di atas maka sisipkanlah baris-baris
berikut dalam init() untuk menggambari applet dengan mouse.
// mouse di-drag di atas applet
Dan tambahkan deklarasi variabel di awal applet.
xold = e.getX();
yold = e.getY();
g.drawLine(xold,yold,xold,yold);
this.addMouseMotionListener(
int x = e.getX();
int y = e.getY();
g.drawLine(xold,yold,x,y);
xold = x;
yold = y;3. Contoh Kerangka Program Tugas 4
Klik disini untuk melihat kerangka program (format txt).
4. Beberapa Petunjuk Mengenai Algoritma Dijkstra