KELAS INNER, KELAS
ABSTRAK,
DAN INTERFACE
16th week
Estu Sinduningrum, ST, MT
K
ELASI
NNER(I
NNERC
LASS)
Kerangka umum program yang berorientasi objek. Sejauh ini
Anda mengetahui bahwa dalam satu file *java terdapat satu atau lebih kelas dan masing-masing kelas mengandung data dan method.
Selain bentuk kerangka umum tersebut, java
memperbolehkan Anda menyisipkan suatu kelas ke dalam kelas lainnya.
Kelas sisipan ini disebut Inner class.
Kelas Inner ini bersifat tersarang terhadap kelas utamanya,
seperti halnya blok penyeleksian (if, for ) yang tersarang pada blok penyeleksian lainnya atau method yang tersarang pada method lainnya.
Estu Sinduningrum, ST, MT
KERANGKA KELAS YANG
Estu Sinduningrum, ST, MT
Inner Class adalah Kelas yang disisipkan di dalam kelas yang lain. Fungsi kelas sisipan ini adalah mendukung suatu proses yang akan dijalankan oleh kelas utamanya.
Estu Sinduningrum, ST, MT
Beberapa Ketentuan Inner Class adalah sebagai berikut:
1. Bila sebuah kelas mengandung suatu inner kelas, maka pada saat kompilasi akan dihasilkan file *.class untuk keduanya (kelas utama dan kelas inner nya).
File *.class akan memiliki nama NamaKelasTerluarNamaKelasInner.class untuk kelas inner.
Bila kelas inner tersebut tidak diberi nama, maka format filenya menjadi: NamaKelasTerluar $#.class.
Simbol # menyatakan nomor urutan kelas inner.
2. Inner Class yang dideklarasikan dengan nama dapat dibubuhi modifier public, private, dan protected.
3. Gunakan bentuk NamaKelasTerluar.this untuk mengakses referensi this dari kelas terluar.
Estu Sinduningrum, ST, MT
4. Dalam proses pembentukan objek, Kelas Terluar
bertanggung jawab untuk menciptakan objek dari Kelas Innemy'a. Prosesnya adalah sebagai berikut:
Buat objek dari Kelas Terluar (misal objek tersebut a); Menugaskan objek tersebut kepada sutu objek referensi
dari hasil instansiasi.
Kelas Inner (misal objek referensi Kelas Inner b.).
KETENTUAN INNER CLASS
KelasTerluar a = new KelasTerluar();
Estu Sinduningrum, ST, MT
Inner Class dapat dibubuhi modifier static.
Dengan modifier static, maka Anda dapat membuat
objek dari kelas Inner tersebut tanpa harus melalui Kelas Terluarnya.
Sebagai konsekuensinnya, maka Kelas Inner tersebut
tidak dapat mengakses variabel maupun method nonstatic dari Kelas Terluarnya.
/**
*Title : DemoKelas Inner
*Deskripsi : Mendemonstrasikan Kelas Inner sebagai
* suatu kelas yang tersarang terhadap
* kelas lainnya. */
// Kelas Terluar class KelasTerluarA{
private String pesan = "Objek dari KelasTerluarA";
// Method konstruktor untuk kelas KelasTerluarA
KelasTerluarA (String noObjek){ pesan = pesan + noObjek;
}
// Method cetak pesan yang dimiliki oleh kelas KelasTerluarA
public void cetakPesan() {
System.out.println(pesan); }
// Kelas Inner tingkat pertama class KelasInnerB {
private String pesan = "Objek dari KelasInnerB";
// Method konstruktor untuk kelas KelasInnerB
KelasInnerB (String noObjek){ pesan = pesan + noObjek;
}
// Method cetak pesan yang dimiliki oleh kelas KelasInnerB
public void cetakPesan() {
System.out.println(pesan); }
// Kelas Inner tingkat kedua class KelasInnerC {
private String pesan = "Objek dari KelasInnerC";
KelasInnerC(String noObjek){ pesan = pesan + noObjek;
}
// Method cetak pesan yang dimiliki oleh kelas KelasInnerC
public void cetakPesan() {
/** Mencetak pesan dari variabel yang dimiliki *oleh objek dari KelasInnerA */
System.out.println(KelasTerluarA.this.pesan); KelasTerluarA.this.cetakPesan();
System.out.println("\n"); } } } } public class DemoKelasInner{ /** Main Method */
public static void main (String args[]) {
/**
*Mengakses method cetakPesan yang dimiliki oleh
*KelasInnerC yang tersarang pada KelasTerluarA dan
*Kelas InnerB --> A(B(C)) dengan membuat
*objekKelasA --> *objekKelasB --> ObjekKelasC.namaMethod
*/
KelasTerluarA a = new KelasTerluarA("Cara 1"); KelasTerluarA.KelasInnerB b = a.new KelasInnerB("Cara 1"); KelasTerluarA.KelasInnerB.KelasInnerC c = b.new KelasInnerC("Cara 1"); c.cetakPesan(); /**
*Mengakses method cetakPesan yang dimiliki oleh
*KelasInnerC yang tersarang pada KelasTerluarA dan
*Kelas InnerB --> A(B(C)) dengan membuat *objekKelasB --> *ojekKelasC.namaMethod */ KelasTerluarA.KelasInnerB bb = new KelasTerluarA("Cara2").new KelasInnerB("Cara2"); KelasTerluarA.KelasInnerB.KelasInnerC cc = bb.new KelasInnerC("Cara 2"); cc.cetakPesan(); /**
*Mengakses method cetakPesan yang dimiliki oleh
*KelasInnerC yang tersarang pada KelasTerluarA dan
*Kelas InnerB --> A(B(C)) dengan membuat *ojekKelasC.namaMethod */ KelasTerluarA.KelasInnerB.KelasInnerC ccc = new KelasTerluarA("Cara3").new KelasInnerB("Cara3").new KelasInnerC("Cara3"); ccc.cetakPesan(); } }
Estu Sinduningrum, ST, MT
M
ENGGUNAKANI
NNERC
LASS Konsep Inner class sering digunakan untuk
menambahkan blok handler pada main method suatu aplikasi berbasis GUI.
Blok Handler merupakan bagian program yang akan
memproses event-event yang dipicu ketika user berinteraksi dengan komponen-komponen GUI
/**
*Title : Demo JButton Inner Class *Deskripsi : Membuat aplikasi Button
sederhana
* dengan handlernya menggunakan *prinsip Inner Class
*/
import java.awt.*; import java.awt.event.*;
import javax.swing.*;
public class DemoJButtonInner extends JFrame { // Mendeklarasikan button private JButton btn; // Konstruktor Default public DemoJButtonInner() { super("Demo Jbutton Inner Class");
Container c = getContentPane(); c.setLayout( new FlowLayout());
// Menugaskan objek-objek Jbutton btn = new JButton("Button");
c.add(btn);
// Membuat objek (instans) dari inner class ButtonHandler
// yang digunakan untuk button event handling ButtonHandler handler = new ButtonHandler();
btn.addActionListener(handler); setSize(275,100);
show(); }
/** Main Method */ public static void main (String args[]) { DemoJButtonInner app = new DemoJButtonInner(); app.addWindowListener ( new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } } ); } // Inner Class untuk "Event handling" pada button private class ButtonHandler implements ActionListener { public void actionPerformed (ActionEvent e) { JOptionPane.showMessageDialog (null, "Anda telah menekan :" + e.getActionCommand() + "\n" + "Handler Button ini menggunakan prinsip Inner Class"); } } }
Estu Sinduningrum, ST, MT
K
ELASA
BSTRAK(A
BSTRACTC
LASS)
Kelas Abstrak (Abstract class) adalah kelas yang
terletak pada posisi tertinggi dari hierarki kelas.
Kelas ini digunakan sebagai basis bagi penurunan
kelas-kelas lainnya, sehingga tidak dapat diinstansiasi secara langsung menjadi objek.
Sebagai kelas basis, kelas ini hanya berisi variabel
umum dan deskripsi method tanpa detail implementasi.
Selanjutnya, kelas-kelas yang diturunkan dari kelas
abstraklah yang harus mendefinisikan secara detail method tersebut.
Estu Sinduningrum, ST, MT
Bentuk Umum :
K
ELASA
BSTRAK(A
BSTRACTC
LASS)
Kelas Abstrak
Adalah kelas yang terletak pada posisi tertinggi dari hierarki kelas dari menjadi basis untuk mcnurunkan kelas-kelas lainnya.
(Modifier tambahan) abstract class NamaKelasAbstract{
Variabel umum dan Deskripsi method tanpa Implentasi; }
Estu Sinduningrum, ST, MT
I
LUSTRASI
Asumsikan rerdapat suatu kelas MakhlukHidup yang
merupakan kelas abstract semua makhluk yang hidup di bumi ini (manusia, hewan tumbuhan).
Anda ingin memiliki kelas yang dapat menginstans
objek yang bernama Amir, Tati, Santi, dan John.
Tentu tidaklah mungkin untuk menginstans kelas
MakhlukHidup langsung menjadi objek-objek tersebut karena kelas tersebut hanya mendefinisikan data dan method umum yang berlaku untuk seluruh makhluk hidup (manusia, hewan, tumbuhan).
Estu Sinduningrum, ST, MT
Karena kelas MakhlukHidup terletak pada hirarki teratas,
maka Anda harus membentuk subkelas-subkelas untuk dapat menginstans objek Amir, Tati, dan seterusnya.
Subkelas ini bisa berupa MahlukHidup - Manusia atau bisa
juga MakhlukHidup - Manusia - RasAsia - Indonesia - pekerja, dan sebagainya.
Selanjutnya, apabila Anda mengacu kepada struktur
organisasi perusahaan, maka kelas pekerja ini dapat dipandang sebagai suatu kelas abstrak bagi kelas-kelas yang diturunkan darinya, seperti Kelas Direktur, Kelas Manajer, Kelas Staff, Kelas Buruh, dan seterusnya
Estu Sinduningrum, ST, MT
I
NTERFACE
Adalah kumpulan method yang hanya memuat deklarasi dan
struktur method, tanpa detail implementasinya.
Interface digunakan bila Anda ingin mengaplikasikan suatu
method yang spesifik, yaitu tidak diperoleh dari proses pewarisan kelas, interlace bersifat disisipkan (embeded) pada program, dan programmer diberi keleluasaan untuk merancang dan mendefinisikan sendiri detail prosesnya.
Dalam istilah pemrograman, Kelas dan Interfacc
fundamental yang dijadikan Library relerensi dikenal dengan istilah API (Application Programming Interface).
Estu Sinduningrum, ST, MT
Interface dideklarasi kan sebagai berikut:
D
EKLARASI
I
NTERFACE
Interface adalah kumpulan struktur method, tanpa detail method yang hanya memuat deklarasi dan implementasinya
Modifier interface namaInterface {
/* *Deklarasi konstanta*/ /**Signature method*/
/**
*Title : Demo Interface
*Deskripsi : Menerapkan konsep interface */
/** Deklarasi Interface */ interface Konstanta {
double KONST_PI = 3.14;
String KONST_SATUAN_LUAS = "cm. persegi"; String KONST_SATUAN_PANJANG = "cm.";
}
public class DemoInterface implements Konstanta { /** Main Method */
public static void main (String args[]){
System.out.println("\nPROGRAM DEMO INTERFACE"); System.out.println("---\n");
double radius = 10;
System.out.println("Radius Lingkaran :"+ radius); System.out.println("Luas Lingkaran :"+(KONST_PI*radius*radius)+KONST_SATUAN_LUAS); System.out.println("Keliling Lingkaran"+(2*KONST_PI*radius)+ Konstanta.KONST_SATUAN_PANJANG); } } Estu Sinduningrum, ST, MT
Estu Sinduningrum, ST, MT
M
ENGAPAB
UTUHI
NTERFACE?
Ada dua pertanyaan yang mungkin timbul saat ini.
Pertama, bila Anda bisa mendefinisikan suatu kelas sedemikian rapi dan lengkap, mengapa masih dibutuhkan interface?
Pertanyaan kedua, apakah konsep pewarisan data dan
method (inheritance) masih belum cukup untuk memecahkan masalah?
Estu Sinduningrum, ST, MT
M
EMECAHKANB
AGIAN YANGR
UMITDAN
S
PESIFIK Marilah kita tinjau prinsip perancangan program untuk menjawab
pertanyaan pertama.
Dalam merancang suatu program.
Langkah-langkah yang sering dilakukan adalah mengidentifikasi dan
menganalisa masalah, kemudian melakukan abstraksi dan konseptualisasi solusi, dan selanjutnya merancang resources dan komponen yang dibutuhkan.
Resource dan komponen dalam OOP dikenal sebagai kelas, data,
method, interface, dan sebagainya.
Pada saat mcrancang resource dan komponen, terkadang ada bagian
yang cukup rumit dan spesifik yang tidak belum disediakan oleh J2SDK.
Estu Sinduningrum, ST, MT
Berikut ini dua pilihan untuk memecahkan masalah.
1. Membuatnya dari awal, mulai dari deklarasi kelas,
menentukan data, dan method serta detail implementasi dari method tersebut. Prinsip ini sering disebut sebagai Pemrograman dari Corat-Coret (Programming from the Scratch).
2. Memanfaatkan solusi yang sudah dibuat rincian
didefnisikan oleh suatu vendor dan menggunakannya dalam program.
M
EMECAHKANB
AGIAN YANGR
UMITEstu Sinduningrum, ST, MT
Prinsip pertama berarti Anda berusaha untuk menciptakan
sendiri bagian yang spesifik dan rumit tersebut.
Ditinjau dari segi biaya, prinsip ini paling murah (low cost)
karena Anda tidak perlu membeli resource dan omponen dari vendor lain.
Kelemahannya adalah waktu perancangan lebih lama dan
terkadang tidak sesuai untuk aplikasi yang membutuhkan kehandalan dan performansi yang tinggi, seperti pada aplikasi telekomunikasi dan keamanan transaksi bank (membutuhkan cryptography)
M
EMECAHKANB
AGIAN YANGR
UMITEstu Sinduningrum, ST, MT
Prinsip kedua memang lebih mudah dan relatif lebih cepat
karena tinggal menggunakan kelas atau interface solusi yang telah dibuat oleh suatu vendor.
Selain itu, keandalan dan performansinya juga dijamin oleh
vendor sehingga dapat diterapkan untuk aplikasi yang sangat kritis.
Bila resource ini bersifat gratis seperti J2SDK dari Sun, maka
biaya bisa ditekan.
Namun bila harus membeli, biasanya harganya sangat
mahal.
M
EMECAHKANB
AGIAN YANGR
UMITEstu Sinduningrum, ST, MT
K
ETERBATASANI
NHERITANCE Sebelum menjawab pertanyaan kedua, marilah Anda
tinjau lagi sifat dan keterbatasan pewarisan (inheritance).
Inheritance adalah proses pewarisan data dan method
dari suatu kelas induk (kelas super) kepada kelas anaknva (subkelas).
Sebuah subkelas atau kelas turunan hanya boleh
Estu Sinduningrum, ST, MT
K
ETERBATASANI
NHERITANCE Prinsip inheritance ini dapat dianalogikan sebagai
proscs pewarisan genetika dan hubungan darah, dari ayah dan ibu kenada anak-anaknya.
Sepasang suami istri dapat mcrniliki lebih dari satu
anak, namun anak tidak mungkin berasal dari lebih dari satu pasangan suami istri.
Dalam prinsip pewarisan (inheritance), kelas turunan (subclass) hanya boleh diturunkan dari satu kelas induk (kelas super).
Estu Sinduningrum, ST, MT
Kembali ke persoalan semula, bagaimana bila Anda
ingin memiliki kelas yang di dalamnya terdapat method-method yang bcrasal dari beberapa library referensi (kelas) yang berbeda? Dalam hal inilah interface berperan karena dengan Interface Anda bisa memasukkan method-method dari beberapa Libarary referensi tanpa harus menurunkannya dari suatu kelas
K
ETERBATASANI
NHERITANCEInterface merupakan solusi atas prinsip pewarisan lebih dari satu (multiple inheritance). Dengan interface, suatu objek dapat memiliki behavior yang berasal dari beberapa referensi.
Estu Sinduningrum, ST, MT
Interface dapat diilustrasikan sebagai berikut.
Seorang artis ingin memiliki banyak keahlian dalam bidang
seni, seperti menyanyi, main film laga, dan melawak.
Dia ingin bergaya seperti seorang Ricky Martin, berkungfu
seperti Jacky Chan, dan membuat penonton terpingkal-pingkal bak Mr. Bean.
Apa yang harus dilakukannya? Tentu ia harus mempelajari
bagaimana aktor-aktor tersebut melakukannya, dan kemudian menambahkan pengetahuan tersebut sebagai keahlian baru baginya.
Ia tidak perlu menjadi anak dari mereka untuk dapat meniru
tingkah laku ketiga artis tersebut.
Estu Sinduningrum, ST, MT
A
PAKAHI
NTERFACE= K
ELASA
BSTRAK?
Pertanyaan selanjutnya adalah: apakah interface sama
dengan kelas abstrak?
Ditinjau dari bagaimana kelas abstrak dan interfacc
terdeklarasi, memang ada kemiripan di antara keduanya.
Kelas abstrak adalah kelas yang terletak pada hierarki
teratas dari bagan kelas sehingga tidak mungkin langsung diinstansiasi menjadi objek.
Demikian juga dengan interface, ia tidak dapat
Estu Sinduningrum, ST, MT
Meskipun ada kemiripan, namun Anda tidak bisa
mengatakan bahwa interface sama dengan kelas abstrak.
Berikut ini data perbedaan di antara kelas abstrak,
kelas secara umum, serta interface.
Perbedaan Komponen penyusun Kelas Abstrak dan Interface adalah:
1 Tipe data/ Variabel Kelas Abstrak :
Interface : semua tipe data. hanya boleh berupa konstanta. 2 Method
Kelas Abstrak : Interface :
bisa berupa signature-nya saja atau berupa detail implementasi method.
hanya berupa signature, programmer harus mendefinisikan dan membuat detail
implementasi dari method. Jadi. method yang terdapat di dalam interfae adalah method abstrak.
3 Sintaks Method Kelas Abstrak:
Interface :
Semua method yang didelarasikan di dalam kelas abstrak harus dibubuhi modifier abstract.
Tidak perlu membubuhkan modifier
Perbedaan antara (secara umum) dan Interface adalah:
1 Defisi
Kelas : Interface :
Pemodelan dari objek.
kumpulan method yang hanya diterapkan pada aplikasi tertentu.
2 Kandungan informasi
Kelas : Interface :
Mendefinisikan variabel dan method secara detail dan konkret.
hanya mendefinisikan signature dari method, selanjutnya programerlah yang menentukan detail method.
3 Instansiasi Kelas : Interface :
Bisa diinstansiasi menjadi objek.
Estu Sinduningrum, ST, MT
Bila suatu kelas ingin menggunakan interface, maka
pada deklarasi kelas tersebut harus ditambahkan keyword implements dan nama interface-nya.
Selanjutnya, method dari interface tersebut harus
disisipkan dan didefinisikan secara detail pada kelas
Estu Sinduningrum, ST, MT
MENGAPLIKASIKAN INTERFACE
Interface sering digunakan untuk menambahkan
event handling pada program.
Contoh yang bagus adalah saat Anda merancang
aplikasi GUI yang lengkap, mulai dari pemilihan
komponen sampai perancangan bagian pemrosesan
eventnya.
/**
*Title : Demo JButton Interface
*Deskripsi : Membuat aplikasi Jbutton
* Sederhana dengan handlernya menggunakan * konsep Inner Class
*/
import java.awt.*;
import java.awt.event.*; import javax.swing.*;
public class DemoJButtonInterface extends JFrame implements ActionListener {
// Mendeklarasikan button private JButton btn; // Konstruktor Default
public DemoJButtonInterface() {
super("Demo JButton Token.face"); Container c = getContentPane(); c.setLayout( new FlowLayout()); // menugaskan objek Jbutton
btn = new JButton("Button"); c.add(btn); // Meregistrasi listener btn.addActionListener(this); setSize(275,100); show(); } Estu Sinduningrum, ST, MT /** Main Method */
public static void main (String args[]) {
DemoJButtonInterface app = new DemoJButtonInterface();
app.addWindowListener ( new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
System.exit(0);
} } ); }
// Method actionPerformed untuk memproses // event yang dipicu oleh listener
public void actionPerformed (ActionEvent e)
{
JOptionPane.showMessageDialog (null, "Anda telah menekan :" +
e.getActionCommand() + "\n" + "Handler Button ini menggunakan prinsip Interface");
P
ERTANYAAN
:
Perhatikan hasil dari Netbeans 34 dan
36, adakah perbedaannya?? Analisa dari
codingnya.. Apa perbedaannya? Dan
buat juga flowchartnya.
GUI BASIC : AWT
(ABSTRACT WINDOWING
TOOLKIT)
Estu Sinduningrum, ST, MT
P
EMROGRAMAN
GUI
Bagi sebagian besar pengguna, bekerja dengan I/O yang
berbasis text atau console adalah membosankan.
Sebagian besar pengguna lebih menyukai aplikasi yang
bcrbasis GUI (Graphical User Interface) karena memiliki tampilan yang lebih interaktif.
Java menyediakan dua kelas untuk bekerja dengan GUI,
Estu Sinduningrum, ST, MT
AWT terdapat dalam package java.awt.
Package ini berisi kompnnen-komponen GUI yang
bersifat platform oriented atau tergantung pada suatu platform sistem operasi.
Swing ada pada package javax.swing dan bersifat
lightweight, yaitu dapat diaplikasikan untuk semua
platform (multiplatform).
Estu Sinduningrum, ST, MT
Beberapa fasilitas yang disediakan package java.awt
adalah:
1. Pengaturan tata letak (layout management)
komponen dalam suatu kontainer.
2. Mendukung event handling, yaitu mekanisme
pendeteksian event dan penentuan respons yang akan diberikan ketika pengguna (user) mengakses komponen tersebut.
3. Manipulasi grafis dari komponen, seperti font, warna,
icon, dan sebagainya.
Estu Sinduningrum, ST, MT
K
OMPONEN
Kelas Component merupakan kelas abstrak dari semua
komponen yang digunakan untuk merancang GUI.
Kelas ini memiliki beberapa subkelas yang merupakan
kelas konkrit dari komponen-komponen kontrol GUI, seperti Button, Label, CheckBox, dan sebagainya.
Estu Sinduningrum, ST, MT
K
ELAS
C
OMPONENT
DAN
S
UBKELASNYA
Komponen (Component)
Komponen merupakan Kelas Super dari
semua komponen kontrol GUI yang bukan
merupakan menu. Kelas ini menyediakan
basic support untuk event handling,
pengubahan ukuran komponen (resizing),
pengaturan font dan warna, dan sebagainya.
Estu Sinduningrum, ST, MT
Komponen Kontrol GUI (Subkelas dari Component)
Button adalah tombol dengan label text dan akan mentrigger event ketika user mengklik/menekan tombol tersebut
Canvas adalah komponen yang digunakan untuk menggambar dan merancang komponen GUl.
Checkbox adalah komponen yang menyediakan suatu set pilihan yang dapat ditoggle on/off. CheckBox dapat dikelompokkan untuk membentuk radio button.
Choice adalah komponen yang memberikan menu yang dapat muncul secara otomatis (pop-up).
Label adalah komponen yang digunakan untuk menampilkan tulisan/pesan yang hanya dapat dibaca, tidak dapat dimodifikasi.
K
ELAS
C
OMPONENT
DAN
S
UBKELASNYA
Estu Sinduningrum, ST, MT
Komponen Kontrol GUI (Subkelas dari Component)
List adalah komponen yang berupa list pilihan yang dapat digulung (scroll).
Scrollbar adalah komponen yang dapat digeser secara vertikal maupun horisontal untuk menunjukkan posisi atau suatu nilai
TextField adalah komponen yang digunakan untuk menulis text yang berukuran kecil/singkat.
TextArea Sama seped TextField, namun memiliki kapasitas lebih besar.
K
ELAS
C
OMPONENT
DAN
S
UBKELASNYA
Estu Sinduningrum, ST, MT
K
ONTAINER
Container merupakan subkelas dari Component yang
berfungsi untuk "memuat" komponen-komponen lainnya.
Kelas ini memiliki beberapa subkelas seperti Panel,
Window, Frame, dan sebagainya.
Kontainer (Container)
Kontainer adalah komponen yang digunakan untuk "memuat" kompcnen atau bahkan kontainer lainnya. Karena sifatnya ini, container dapat diibaratkan sebagai root (akar) dari pohon hierarki komponen yang membentuk aplikasi.
Estu Sinduningrum, ST, MT
Sub kelas dari Container
Panel adalah kontainer paling ideal dan sering digunakan untuk
"memuat komponen dan kontainer lainrya" dalam suatu hierarki.
Applet adalah panel khrsus yang digunakan untuk membuat program
yang dijalankan pada browser internet.
Window merupakan kelas pada top level window yang tidak memiliki title
dan border.
Frame merupakan kelas pada top level window yang memiliki title bar,
menu bar, dan border. Selain itu, frame juga dapat diubah-ubah ukurannya (resize) dan dapat dipindahkan.
Dialog merupakan kelas pada top level window yang memiliki satu title
bar dan suatu border. Sering digunakan untuk window yang utama untuk aplikasi. Dialog dapat diubai-ubah ukurannya (resize) dan dapat dipindahkan.
Estu Sinduningrum, ST, MT
K
ELAS
C
ONTAINER
Kelas Container lebih sering digunakan dalam
merancang tata letak komponen GUI layout Management).
Konstruktor:
Estu Sinduningrum, ST, MT
Kelas window tidak dapat disisipkan pada
komponen atau kontainer lainnya karena
merupakan top level class.
Kelas ini jarang digunakan, namun memiliki
dua subkelas yang sering dipakai, yaitu kelas
Dialog dan kelas Frame.
Estu Sinduningrum, ST, MT
Ada tiga method peting dalam kelas ini. yaitu:
1. void pack()
Method ini akan mengemas-meng-adjust layout management agar
sesuai dengan ukuran subkomponen yang termuat di dalamnya. 2. void show()
Method ini akan membuat layout dan semua subkomponen yang
termuat di dalamnya menjadi visible pada layar monitor dan sekaligus membawanya ke urutan paling muka dari semua aplikasi window yang sedang dijalankan.
Secara default, komponen-komponen yang sudah dibuat bersifat
invisible, tidak tarnpak pada saat dijalankan. Anda juga bisa memakai method setVisible() untuk meng-enable-kannya, namun method ini tidak otomatis membawa komponen tersebut ke muka layar monitor.
Estu Sinduningrum, ST, MT
2. void show()
Secara default, komponen-komponen yang sudah dibuat bersifat
invisible, tidak tarnpak pada saat dijalankan. Anda juga bisa memakai method setVisible() untuk meng-enable-kannya, namun method ini tidak otomatis membawa komponen tersebut ke muka layar monitor.
3. void dispose()
Method ini dipanggil untuk "membebaskan" resource window,
setelah Anda selesai menggunakan komponen-komponennya. Method ini tidak berarti menghapuskan objek window terscbut, namun hanya bersifat "menutup" kemungkinan objek-objek tersebut diakses kcmbali setelah operasi selesai dilakukan.
Estu Sinduningrum, ST, MT
K
ELAS
F
RAME
Seperti yang telah dijelaskan sebelumnya, kelas Frame
merupakan subkelas dari kelas window.
Frame dapat diubah ukurannya (resize), dapat
digerakkan, dan dapat memiliki title bar, icon, dan menu.
Konstruktor:
Frame();
Estu Sinduningrum, ST, MT
Langkah-langkah bekerja dengan Frame adalah sebagai
berikut:
1. Membuat objek Frame.
Frame frm = new Frame("FrameTest");
2. Menambahkan komffien atau panel.
frm.add(new Button("Test"); 3. Mengeset ukuran frame. Frm.setSize( 150, 250);
4. Memanggil method pack. frm.pack();
5. Membuat komponen tersebut merrjadi visible. frm.setVisible(true);
Estu Sinduningrum, ST, MT
K
ELAS
P
ANEL
Meskipun Frame merupakan kontainer yang sering
digunakan untuk menempatkan komponen secara langsung, naun dalam pengorganisasian tata letak komponen (layout), ada baiknya Anda mengemas komponen-komponen tersebut ke dalarn panel terlebih dahulu. Selanjutnya, panel-panel tersebut Anda menambahkan ke frame
Estu Sinduningrum, ST, MT
SKENARIO LAYOUT MENGGUNAKAN
Estu Sinduningrum, ST, MT
K
ELASD
IALOG Dialog juga merupakan subkelas dari sama seperti
Frame, yaitu dapat di-resize dan bisa menambahkan icon atau menu bar.
Konstruktor:
Dialog( Frame parent);
Dialog(Frame parent, boolean modal); Dialog(Frame parent, String title);
Estu Sinduningrum, ST, MT
K
OMPONEN
K
ONTROL
GUI
Komponen GUI dalam Java dapat dibagi ke dalam dua kelas
besar, yaitu Kelas Component dan Kelas MenuComponent.
Kelas Component terdiri dari beberapa komponen kontrol
GUI, seperti Button, CheckBox, Choice, TextField, dan lain-lain.
Komponen kontrol ini digunakan sebagai user interface yang
akan ditaruh dalam suatu kontainer.
Kelas Menu Component terdiri dari komponen kontrol yang
Estu Sinduningrum, ST, MT
Langkah-langkah bekerja dengan komponen-komponen tersebut
adalah:
1. Membuat objek dari kelas komponen dengan memanggil
konstruktornya.
Button btn = new Button('‘test");
2. Memuat komponen tersebut ke dalam kontainer. frm.add(btn);
3. Memproses event yang ditrigger oleh user terhadap komponen
tersebut. Anda harus menambahkan interface event listener pada listing komponen tersebut untuk membacamendeteksi event,
sedangkan untuk memprosesnya dibutuhkan event handler.
Estu Sinduningrum, ST, MT
K
ELASC
OMPONENT Kelas ini rnerupakan basis dari kelas-kelas komponen
lainnya.
Konstruktor: Konstanta :
1. static float BOTTOM_ALIGNMENT 2. static float CENTER_ALIGNMENT 3. static float LEFT_ALIGNMENT
4. static float RIGHT_ALIGNMENT 5. static float TOP_ALIGNMENT
M
ETHOD
K
ELAS
C
OMPONENT
:
Tipe Kembalian Method Kelas Component
void addPropertyChangeListene(String propertyName, PropertyChangeListener listener)
void applyComponentOrientation(ComponentOrientation orientation)
boolean areFocusTraversalKeysSet(int id)
int checklmage(Image image, ImageObserver observer)
int checkImageIlmage image, int width, int height, ImageObserver observer)
Protected
AWTEvent coalesceEvents(AWTEvent existing Event, AWTEvent newEvent)
boolean contains(int x, int y)
boolean contains(Point p)
Image createImage(ImageProducer producer)
Image createImage(int width, int height)
Konstruktor:
Method yang dapat digunakan untuk mengeset label
adalah:
String getLabel( )
void setLabel(String label)
Estu Sinduningrum, ST, MT
Button( )
Button(String Label)
import java.awt.*;
public class TesButton extends Frame { public static void main(String[] args) { TesButton apl = new TesButton(); }
public TesButton() { super("Tes Button"); setSize(300, 100);
Panel panelTombol = new Panel(); panelTombol.add(new Button("Perbesar")); panelTombol.add(new Button("Selesai")); add("South", panelTombol); show(); } } Estu Sinduningrum, ST, MT
Estu Sinduningrum, ST, MT
import java.awt.*;
public class TesButton2 extends Frame { int lebar = 300;
int tinggi= 100;
public static void main(String[] args) { TesButton2 apl = new TesButton2(); }
public TesButton2() { super("Tes Button"); setSize(lebar, tinggi);
Panel panelTombol = new Panel(); panelTombol.add(new Button("Perbesar")); panelTombol.add(new Button("Selesai")); add("South", panelTombol); show(); }
public boolean handleEvent(Event
kejadian) { switch (kejadian.id) { case Event.WINDOW_DESTROY: System.exit(0); return true; case Event.ACTION_EVENT: if (kejadian.target instanceof Button) { if ("Perbesar".equals(kejadian.arg)) { lebar += 20; tinggi += 10; setSize(lebar, tinggi); } else if ("Selesai".equals(kejadian.arg)) { System.exit(0); return true; } } } return false; } }
Estu Sinduningrum, ST, MT
import java.awt.*;
import java.awt.event.*;
public class TesButton3 extends Frame { int lebar = 300;
int tinggi= 100;
public static void main(String[] args) { TesButton3 apl = new TesButton3(); } public TesButton3() {
super("Tes Button"); setSize(lebar, tinggi);
Button tombolPerbesar = new Button("Perbesar");
Button tombolSelesai = new Button("Selesai");
Panel panelTombol = new Panel(); panelTombol.add(tombolPerbesar); panelTombol.add(tombolSelesai); add("South", panelTombol); // --- Penanganan kejadian tombolPerbesar.addActionListener( new TesButton3.PenanganTombol()); tombolSelesai.addActionListener( new TesButton3.PenanganTombol()); addWindowListener( new TesButton3.PenanganKejadian()); // --- Tampilkan frame show(); }
class PenanganKejadian extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0); } }
class PenanganTombol implements ActionListener { public void actionPerformed(ActionEvent e ) { String s = e.getActionCommand(); if (s.equals("Perbesar")) { lebar += 20; tinggi += 10; setSize(lebar, tinggi); } else if (s.equals("Selesai")) { System.exit(0); } } } }
P
ERTANYAAN
:
Perhatikan hasil dari Netbeans 38 dan
39, adakah perbedaannya?? Analisa dari
codingnya.. Apa perbedaannya? Dan
buat juga flowchartnya.
Estu Sinduningrum, ST, MT
import java.awt.*;
import java.awt.event.*;
public class TesCheckBox extends Frame {
Checkbox cb1, cb2, cb3; TextArea tArea;
public static void main(String[] args) { TesCheckBox apl = new
TesCheckBox(); } public TesCheckBox() { super("Tes Checkbox"); setSize(400, 120); cb1 = new Checkbox("Java"); cb2 = new Checkbox("C++"); cb3 = new Checkbox("PHP"); tArea = new TextArea("",3, 35, TextArea.SCROLLBARS_NONE); tArea.setEditable(false);
Panel p1 = new Panel(); p1.setLayout(new GridLayout(3,1)); p1.add(cb1); p1.add(cb2); p1.add(cb3); Panel p2 = new Panel(); p2.add(tArea); add("West", p1); add("East", p2); cb1.addItemListener( new TesCheckBox.PenanganItem()); cb2.addItemListener( new TesCheckBox.PenanganItem()); cb3.addItemListener( new TesCheckBox.PenanganItem());
Estu Sinduningrum, ST, MT
// --- Tampilkan frame show(); }
public void tampilkanInfo() { String sCB1, sCB2, sCB3;
sCB1 = "Status Java: " + cb1.getState(); sCB2 = "Status C++: " + cb2.getState(); sCB3 = "Status PHP: " + cb3.getState();
tArea.setText(sCB1 + "\n" + sCB2 + "\n" + sCB3); }
class PenanganItem implements ItemListener { public void itemStateChanged(ItemEvent e ) {
Object o = e.getItem(); if (o.equals("Java")) { tampilkanInfo(); } else if (o.equals("C++")) { tampilkanInfo(); } else if (o.equals("PHP")) { tampilkanInfo(); } } } }
P
ERTANYAAN
: