modul praktikum pemrograman lanjut
Embed Size (px)
TRANSCRIPT
-
MODUL PRAKTIKUM PEMROGRAMAN LANJUT
Disusun oleh : 1. Candra Dewi, S.Kom., M.Sc. 2. Adharul Muttaqin, ST., MT. 3. Ahmad Afif Supianto, S.Si., M.Kom.
Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya
Malang
-
Praktikum Pemrograman Lanjut 1
DAFTAR ISI DAFTAR ISI .....................................................................................................................1
1. Method Static dan Method Overloading .........................................................................2
2. Class, Konstruktor dan Method Instan .......................................................................... 10
3. Encapsulation ............................................................................................................... 19
4. Inheritance ................................................................................................................... 29
5. Polymorphism .............................................................................................................. 37
6. Interface ....................................................................................................................... 47
7. Graphic User Interface ................................................................................................. 60
8. Graphic User Interface Lanjut ...................................................................................... 73
-
Praktikum Pemrograman Lanjut 2
Bab
1
Method Static dan Method Overloading
Methode Static Hampir semua methode kelas (method yang dikaitkan dengan kelas secara keseluruhan dan
bukan pada instan tertentu) dideklarasikan sebagai static. Method main hanya dapat
mengakses method-method static dalam suatu kelas yang sama.
Program berikut mengimplementasikan method static pada suatu kelas.:
tStatic.java 1 import java.util.Scanner; 2 3 public class tStatic 4 { 5 public static void prosesString ( String s1, String s2 ) 6 { 7 System.out.println ( "String yang dimasukkan adalah :
"+s1 + " dan " + s2); 8 9 } 10 11 public static void prosesInt ( int i ) 12 { 13 System.out.println ( "Hasil kuadrat " + i + " = " +
Math.pow(i,2)); 14 System.out.println ( "Hasil kali " + i + " dengan 2 = "
+ ( i * 2)); 15 } 16 17 public static void prosesDouble2 ( double a, double b ) 18 { 19 System.out.println ( "Hasil kali " + a +" dan " + b + "
= " + ( a * b)); 20 System.out.println ( "Jumlah " + a + " dan " + b + " = "
+ ( a + b)); 21 } 22 23 public static void prosesDouble ( double n ) 24 { 25 System.out.println ( n + " ^ 3 = " + (n*n*n)); 26 System.out.println ( n + " / 3 = " + (n/3)); 27 } 28 29 public static void main ( String [] main ) 30 { 31 String s1, s2; 32 Int i; 33 double d1, d2; 34 35 Scanner input = new Scanner(System.in); 36 37 38 System.out.print("Masukkan string pertama: "); 39 s1 = input.next(); 40 System.out.print("Masukkan string kedua: ");
-
Praktikum Pemrograman Lanjut 3
41 s2 = input.next(); 42 prosesString (s1,s2); 43 44 System.out.print("\nMasukkan bilangan integer : "); 45 i = input.nextInt(); 46 prosesInt(i); 47 48 System.out.print("Masukkan bilangan pecahan pertama: "); 49 d1 = input.nextDouble(); 50 System.out.print("Masukkan bilangan pecahan kedua : "); 51 d2 = input.nextDouble(); 52 53 prosesDouble(d1); 54 prosesDouble2(d1,d2); 55 56 } 57 }
Jalankan program diatas dan cobalah menghilangkan kata kunci static pada method kelas
pada baris 5, 11, 17 dan 23. Perhatikan apa yang terjadi dan jelaskan kenapa hal tersebut
bisa terjadi?
1.1 Method dengan Return Value Kita dapat mendeklarasikan method yang bisa mengembalikan suatu nilai dengan
mengganti reference void dengan tipe tertentu. Perhatikan contoh program berikut yang
memberikan return value dengan tipe long dan double. hitungluas.java 1 import java.util.Scanner; 2 3 public class hitungLuas 4 { 5 public static double luaslingkaran ( int r ) 6 { 7 double Luas; 8 9 Luas = 3.14 * r * r ; 10 11 return Luas; 12 } 13 14 public static long luasbidang( int p, int l ) 15 { 16 long Luas; 17 18 Luas = p * l; 19 20 return Luas; 21 } 22 23 public static void main ( String [] args ) 34 { 25 int r, p,l; 26 double Luas1=0; 27 long Luas2=0; 28 29 Scanner input = new Scanner(System.in);
-
Praktikum Pemrograman Lanjut 4
30 31 System.out.print("Masukkan jari-jari lingkaran : "); 32 r = input.nextInt(); 33 34 Luas1 = luaslingkaran ( r ); 35 System.out.println ("Luas lingkaran : " + Luas1 ); 36 37 System.out.print("\nMasukkan panjang segiempat : "); 38 p = input.nextInt(); 39 System.out.print("Masukkan lebar segiempat : "); 40 l = input.nextInt(); 41 Luas2 = luasbidang(p,l); 42 43 System.out.println ("Luas Bidang : " + Luas2 ); 44 } 45 }
1.2 Method Overloading Overloading terjadi jika beberapa method memiliki nama yang sama, tetapi berbeda
argumennya. Perhatikan program berikut yang merupakan modifikasi contoh program
tStatic dengan mengimplementasikan overloading method.proses. Overloading.java 1 import java.util.Scanner; 2 3 public class Overloading 4 { 5 public static void proses ( String s1, String s2 ) 6 { 7 System.out.println ( s1 + " " + s2); 8 9 } 10 11 public static void proses ( int i ) 12 { 13 System.out.println ( "Hasil kuadrat " + i + " = " +
Math.pow(i,2)); 14 System.out.println ( "Hasil kali " + i + " dengan 2 = "
+ ( i * 2)); 15 } 16 17 public static void proses ( double a, double b ) 18 { 19 System.out.println ( "Hasil kali " + a +" dan " + b + "
= " + ( a * b)); 20 System.out.println ( "Jumlah " + a + " dan " + b + " = "
+ ( a + b)); 21 } 22 23 public static void proses ( double n ) 24 { 25 System.out.println ( n + " ^ 3 = " + Math.pow(n,3)); 26 System.out.println ( n + " / 3 = " + (n/3)); 27 } 28 29 public static void main ( String [] main ) 30 {
-
Praktikum Pemrograman Lanjut 5
31 String s1, s2; 32 Int i; 33 double d1, d2; 34 35 Scanner input = new Scanner(System.in); 36 37 38 System.out.print("Masukkan string pertama: "); 39 s1 = input.next(); 40 System.out.print("Masukkan string kedua: "); 41 s2 = input.next(); 42 proses(s1,s2); 43 44 System.out.print("\nMasukkan bilangan integer : "); 45 i = input.nextInt(); 46 proses(i); 47 48 System.out.print("Masukkan bilangan pecahan pertama: "); 49 d1 = input.nextDouble(); 50 System.out.print("Masukkan bilangan pecahan kedua : "); 51 d2 = input.nextDouble(); 52 53 proses(d1); 54 proses(d1,d2); 55 56 } 57 }
Soal 1.1 (HexToDec)
Susun program yang di dalamnya terdapat method untuk melakukan konversi bilangan
heksadesimal menjadi desimal.
Soal 1.2 (Overloading2)
Susun program dengan menggunakan overloading function dimana bila :
a. Dimasukkan argumen berupa string, maka dia akan menampilkan pola :
Misal : argumen adalah JAVA J J A J A V J A V A
b. Dimasukkan argumen integer, dia akan memberikan pola :
Misal : argumen adalah angka 4 1 2 4 3 6 9 4 8 12 16
-
Praktikum Pemrograman Lanjut 6
c. Dimasukkan dua argument dengan tipe boolean, maka dia akan menampilkan
hasil dari operasi And untuk berbagai kombinasi dari dua argumen tersebut
-
Praktikum Pemrograman Lanjut 7
LEMBAR JAWABAN
-
Praktikum Pemrograman Lanjut 8
-
Praktikum Pemrograman Lanjut 9
-
Praktikum Pemrograman Lanjut 10
Bab
2
Class, Konstruktor dan Method Instan
2.1 Class dan Konstruktor
Sebuah kelas bisa memiliki beberapa konstruktor, yaitu method dengan nama yang sama
dengan nama class tetapi parameternya berbeda. Konstruktor secara otomatis akan
dijalankan jika di-instan obyek dengan tipe kelas tersebut. Rasional2.java 1 public class Rasional2 2 { 3 private int pembilang, penyebut; 4 5 public Rasional2() 6 { 7 pembilang=1; 8 penyebut=1; 9 } 10 11 public Rasional2(int pbl, int pyb) 12 { 13 pembilang=pbl; 14 penyebut=pyb; 15 } 16 17 public int getPbl() 18 { 19 return pembilang; 20 } 21 22 public int getPyb() 23 { 24 return penyebut; 25 } 26 27 public void setRasional(int pbl , int pyb) 28 { 29 pembilang=pbl; 30 penyebut=pyb; 31 } 32 33 public void setPbl(int pbl) 34 { 35 pembilang=pbl; 36 } 37 38 public void setPyb(int pyb) 39 { 40 penyebut=pyb; 41 } 42
-
Praktikum Pemrograman Lanjut 11
Perhatikan deklarasi new pada baris 5 dan 6 (Rasional2Demo.java) ketika sebuah obyek
diinstan dan inisialisasi kontruktor untuk kedua obyek tersebut dimana keduanya
menjalankan kontruktor yang berbeda tergantung dari parameter yang dimasukkan.
Perhatikan pula pemanggilan method-method instan pada main program. Rasional2Demo.java 1 public class Rasional2Demo 2 { 3 public static void main(String[] args) 4 { 5 Rasional2 R1 = new Rasional2(); 6 Rasional2 R2 = new Rasional2(6,8); 7 8 System.out.println("R1.getPbl() : " + R1.getPbl()); 9 System.out.println("R1.getPyb() : " + R1.getPyb() + "\n"); 10 11 System.out.println("R2.getPbl() : " + R2.getPbl()); 12 System.out.println("R2.getPyb() : " + R2.getPyb()+ "\n"); 13 14 R1.setRasional(3,5); 15 16 System.out.println("Setelah nilai pembilang dan penyebut pada
R1 diset ulang"); 17 System.out.println("R1.getPyb() : " + R1.getPyb()); 18 System.out.println("R1.getPyb() : " + R1.getPyb()); 19 } 20 }
2.2 Method Instan
Sebuah kelas juga memiliki method yang dikaitkan dengan instan tertentu. Sewaktu
method instan dipanggil, dia akan mengakses data yang terdapat pada instan yang
dikaitkannya.
Program berikut merupakan modifikasi dari program sebelumnya dengan menyertakan
operasi-operasi pada bilangan rasional. Rasional3.java 1 public class Rasional3 2 { 3 private int pembilang, penyebut; 4 5 public Rasional3() 6 { 7 pembilang=0; 8 penyebut=0; 9 } 10 11 public Rasional3(int pbl, int pyb) 12 { 13 pembilang=pbl; 14 penyebut=pyb; 16 } 17 18 //mengecek suatu bilangan adalah rasional atau bukan 19 public boolean isRasional() 20 {
-
Praktikum Pemrograman Lanjut 12
21 return (penyebut!= 0); 22 } 23 24 //menyederhanakan bilangan rasional 25 public void Sederhana() 26 { 27 int temp, A, B; 28 29 if (penyebut ==0) 30 { 31 return; 32 } 33 34 A = (pembilang penyebut * A.pembilang ); 58 } 59 60 //operator Unary- ---> A = -A 61 public void negasi() 62 { 63 pembilang = - pembilang; 64 } 65 66 //operator unary += 67 public void unaryPlus(Rasional3 A) 68 { 69 pembilang = pembilang * A.penyebut + penyebut * A.pembilang; 70 penyebut *=A.penyebut; 71 } 72 73 public void cetak() 74 { 75 System.out.println(pembilang + "/" + penyebut); 76 } 77 }
Rasional3Demo.java 1 public class Rasional3Demo 2 { 3 public static void main(String[] args) 4 { 5 Rasional3 R1 = new Rasional3(1,2);
-
Praktikum Pemrograman Lanjut 13
6 Rasional3 R2 = new Rasional3(1,3); 7 8 System.out.println("R1.isRasional: " + R1.isRasional()); 9 System.out.println("R2.isRasional: " + R1.isRasional()); 10 System.out.println(); 11 12 System.out.println("R1 > R2 : " + R1.moreThan(R2)); 13 System.out.println(); 14 16 17 System.out.print("R1 : "); 18 R1.cetak(); 19 System.out.print("R2 : "); 20 R2.cetak(); 21 System.out.println(); 22 23 R1.Sederhana(); 24 R2.Sederhana(); 25 26 System.out.print("R1 : "); 27 R1.cetak(); 28 System.out.print("R2 : "); 29 R2.cetak(); 30 System.out.println(); 31 32 System.out.println("Setelah dilakukan Cast ke double menjadi :
" ); 33 System.out.println("R1 : " + R1.Cast()); 34 System.out.println("R2 : " + R2.Cast()); 35 System.out.println(); 36 37 R1.negasi(); 38 System.out.print("Unary- dari R1 : "); 39 R1.cetak(); 40 System.out.println(); 41 42 R1.unaryPlus(R2); 43 System.out.print("Nilai dari 'R1 += R2' : "); 44 R1.cetak(); 45 System.out.println(); 46 } 47 }
Soal 2.1 (Rasional4.java)
Tambahkan operator operator lain untuk melengkapi kelas bilangan rasional diatas,
seperti : (minimal 5 operator)
Operator Unary -= , unary /=, unary *=, unary ++, unary--
Operator < , =
Operator pembanding ==, pembanding !=
Opearator + , - , * , /
-
Praktikum Pemrograman Lanjut 14
LEMBAR JAWABAN
-
Praktikum Pemrograman Lanjut 15
-
Praktikum Pemrograman Lanjut 16
-
Praktikum Pemrograman Lanjut 17
-
Praktikum Pemrograman Lanjut 18
-
Praktikum Pemrograman Lanjut 19
Bab
3
Encapsulation
Enscapsulation (terkadang disebut sebagai Information Hiding) adalah kunci konsep dari
bekerja dengan object. Secara format, encapsulation adalah tidak lebih dari kombinasi dari
data dan method pada paket suatu class dan menyembunyikan implementasi detail dari
user terhadap suatu object. Memahami sifat encapsulation harus mengerti access modifier.
Terdapat 4 access modifier pada OOP yaitu :
Private hanya dapat diakses oleh class itu sendiri
Public dapat diakses dari mana pun
Protected dapat diakses dari package dan sub class
Default no modifier hanya dapat diakses di dalam package saja
Access
Modifier
Class tersebut Package Subclass Root / Network
Private v
Default v v
Protected v v v
Public v v v v
Kunci dari encapsulastion adalah tidak memberikan akses secara langsung kepada class
lain atau program lain kecuali melalui suatu method-method yang ssudah diberikan. Hal ini
menunjukkan bahwa sifat encapsulation pada suatu class sebagai black box dilihat dari
class lainnya. Class lain hanya melihat interface (cara menggunakan method dari class
tersebut). Keuntungan ini memberikan kemampuan desain OOP yang reusable dan reliable.
-
Praktikum Pemrograman Lanjut 20
Perhatikan class Employee berikut ini : employee.java 1 import java.util.Date; 2 import java.text.SimpleDateFormat; 3 4 public class employee 5 { 6 private String name; 7 private double salary; 8 private Date hireDay; 9 10 public employee(String n, double s, int year, int month, int day) 11 { 12 name=n; 13 salary=s; 14 15
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
hireDay = calendar.gettime(); 16 } 17 18 public double getSalary() 19 { 20 return salary; 21 } 22 23 public String getName() 24 { 25 return name; 26 } 27 28 public Date getHireDay() 29 { 30 return hireDay; 31 } 32 33 public void raiseSalary(double byPercent) 34 { 35 double raise = salary * byPercent / 100; 36 salary += raise; 37 } 38 39 53 }
Perhatikan method-method dari class Employee yaitu : getName, getSalary, dan
getHireDay. Method-method ini adalah accessor method karena method tersebut
mengembalikan nilai data dengan sederhana.
Tetapi, tidak kah lebih sederhana jika data name, salary, dan hireDay dibuat public
daripada harus membuat accessor method secara terpisah?
Data name bersifat read-only. Sekali nilai data name diberikan pada saat constructor
dijalankan maka hal ini menjamin data akan terjaga. Sedangkan untuk data salary tidak
bersifat read-only. Oleh sebab itu data salary dapat diubah melalui method raiseSalary. Jika
-
Praktikum Pemrograman Lanjut 21
data salary dibuat public maka akan memberikan peluang akses yang dapat menimbulkan
permasalahan tersendiri. Oleh sebab itu method raiseSalary sekaligus sebgaiai filter untuk
perubahan data salary yang valid. Keuntungan sifat encapsulation yang dapat
menyembuyikan data ini disebut sebagai information Hiding. Secara singkat information
Hiding dapat dinyatakan dengan 3 hal.
Membuat data bersifat private
Memberikan accessor method (getter)
Memberikan mutator method (setter)
PENDEKLARASIAN ACCESS MODIFIER
1. CLASS
Pada class, access modifier yang dapat digunakan hanyalah Public dan Default,
kecuali dalam inner class dapat menggunakan seluruh access modifier.
[ACCESS MODIFIER] NamaClass { // TODO code application logic here }
2. ATRIBUT
Pada atribut, dapat menggunakan seluruh access modifier.
[ACCESS MODIFIER] TIPE_ATRIBUT nama_atribut;
3. METHOD
Pada method, dapat menggunakan seluruh access modifier.
[ACCESS MODIFIER] TIPE_METHOD NamaMethod (){
// TODO code application logic here }
ATAU
[ACCESS MODIFIER] TIPE_METHOD NamaMethod (TIPE_DATA_PARAMETER nama_paramater){
// TODO code application logic here }
-
Praktikum Pemrograman Lanjut 22
Soal 3.1 (Vehicle1.java dan TestVehicle1.java)
Buatlah class Vehicle1 dan TestVehicle1 seperti source code dibawah ini : 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.
public class Vehicle1 { private double load, maxLoad; public Vehicle1 (double max){
this.maxLoad = max;
} public double getLoad(){
return this.load; } public double getMaxLoad(){
return this.maxLoad; } public boolean addBox(double weight){
double temp = 0.0D; temp = this.load + weight; if(temp
-
Praktikum Pemrograman Lanjut 23
1. Method apakah yang menjadi accessor (getter) ?
2. Apakah output dari program tersebut ?
3. Tambahkan source kode berikut dibawah baris ke 6 pada class TestVehicle1. System.out.println("Add load(100kg) : " + (vehicle.load=500)); Jalankan program, apakah output dari program tersebut?
Kembalikan program seperti semula.
4. Ubahlah tipe data pada atribut load dan maxload pada class Vehicle1 menjadi public.
Jalankan program, apakah output dari program tersebut?
a. Tambahkan source kode berikut dibawah baris ke 6 pada class TestVehicle1. System.out.println("Add load(100kg) : " + (vehicle.load=500)); Jalankan program, apakah output dari program tersebut?
Kembalikan program seperti semula.
b. Tambahkan source kode berikut dibawah baris ke 12 pada class TestVehicle1. System.out.println("Add load(100kg) : " + (vehicle.load=500)); Jalankan program, apakah output dari program tersebut?
Kembalikan program seperti semula.
5. Ulangi instruksi pada nomer 4 dengan mengubah tipe data pada atribut load dan
maxload pada class Vehicle1 menjadi protected.
6. Ulangi instruksi pada nomer 4 dengan mengubah tipe data pada atribut load dan
maxload pada class Vehicle1 menjadi default.
7. Tuliskan kesimpulan dari percobaan yang telah dilakukan mulai dari no 3 6 !
-
Praktikum Pemrograman Lanjut 24
LEMBAR JAWABAN
-
Praktikum Pemrograman Lanjut 25
-
Praktikum Pemrograman Lanjut 26
-
Praktikum Pemrograman Lanjut 27
-
Praktikum Pemrograman Lanjut 28
-
Praktikum Pemrograman Lanjut 29
Bab
4
Inheritance
Inheritance memugkinkan untuk membuat sebuah obyek dari obyek lain yang sudah ada
sebelumnya. Dengan inheritance, kita bisa menggunakan kembali atau mengganti method
dari class yang ada, juga menambahkan field instan juga methode yang baru.
Bentuk umum dari inheritance di Java adalah sebagai berikut : public class extends { //body of class } Berikut merupakan contoh penurunan class manager dari class employee. Class manager
selain dapat memakai beberapa method instan dari class employee, juga masih
mempertahankan semua field dari kelas semula.
Disini terdapat tiga kelas, yaitu employee, manager dan employeedemo employee.java 1 import java.util.Date; 2 import java.text.SimpleDateFormat; 3 4 public class employee 5 { 6 private String name; 7 private double salary; 8 Date hdate; 9 10 public employee(String n,double s, Date d) 11 { 12 name=n; 13 salary=s; 14 Hdate = d; 16 } 17 18 public double getSalary() 19 { 20 return salary; 21 } 22 23 public String gstName() 24 { 25 return name; 26 } 27 28 public void print() 29 { 30 Date today = new Date(); 31 SimpleDateFormat format= new SimpleDateFormat("dd MMMM yyyy"); 32 String s = format.format(hdate); 33 System.out.println(" Nama : " + name); 34 System.out.println(" Tanggal masuk : " + s);
-
Praktikum Pemrograman Lanjut 30
35 System.out.println(" Gaji pokok : $ " + salary); 36 System.out.println(" Lama kerja : " + (today.getYear() -
hdate.getYear())+ " Tahun"); 37 } 38 39 public void printSalary() 40 { 41 System.out.println(" Gaji sekarang : $ " + salary); 42 } 43 44 public int hYear() 45 { 46 return hdate.getYear(); 47 } 48 49 public void raiseSalary(double r) 50 { 51 salary *=1+ r/100; 52 } 53 }
Manager.java 1 import java.util.Date; 2 3 public class manager extends employee 4 { 5 public manager(String n,double s, Date d) 6 { 7 super(n,s,d); 8 } 9 10 public void raiseSalary(double r) 11 { 12 Date today = new Date(); 13 double bonus= 0.5 * (today.getYear() - hYear()); 14 super.raiseSalary(r+bonus); 16 } 17 }
Perhatikan perluasan method raiseSalary pada class manager dengan menambahkan
bonus (baris 13) dan pemanggilan method raiseSalary pada base class. (baris 14). Employeedemo.java 1 import java.util.*; 2 3 public class employeedemo 4 {public static void main(String[] args) 5 { 6 employee[] staff=new employee[3]; 7 manager boss = new manager("Dumbledore",5000, new Date(55,6,10));; 8 9 staff[0]=new employee("Harry",750,new Date(60,3,12)); 10 staff[1]=new employee("Hermione",1000,new Date(65, 6,17)); 11 staff[2]=new employee("Ron",800, new Date(70,7,11)); 12 13 System.out.println("Data pegawai sebelum ada kenaikan gaji : " ); 14 System.out.println("Manajer : " ); 16 boss.print(); 17 boss.raiseSalary(5); 18 boss.printSalary(); 19 20 for (int i=0;i
-
Praktikum Pemrograman Lanjut 31
22 System.out.println("Staff ke " + (i+1) + " : "); 23 staff[i].print(); 24 staff[i].raiseSalary(5); 25 staff[i].printSalary(); 26 } 27 } 28 }
Soal 4.1 (programmer.java)
Buatlah class Programmer yang inherit class employee dengan ketentuan kenaikan gaji
sebagai berikut :
Jika masa kerja dibawah 1 tahun : tidak ada perubahan (sama dengan employee)
Jika masa kerja 1- 10 tahun , ada tambahan bonus sebesar 0.01 dari lama kerja
Jika masa kerja diatas 10 tahun, ada tambahan bonus sebesar 0.02 dari lama kerja
Soal 4.2 (direktur.java)
Buatlah class direktur yang inherit class employee dengan ketentuan kenaikan gaji sebagai
berikut :
Selain bonus sebesar 0.5 dari lama kerja , juga mendapat tunjangan sebesar 0.1 dari
lama kerja
-
Praktikum Pemrograman Lanjut 32
LEMBAR JAWABAN
-
Praktikum Pemrograman Lanjut 33
-
Praktikum Pemrograman Lanjut 34
-
Praktikum Pemrograman Lanjut 35
-
Praktikum Pemrograman Lanjut 36
-
Praktikum Pemrograman Lanjut 37
Bab
5
Polymorphism
5.1 Kelas Abstrak
Dengan kelas abstrak memungkinkan untuk membuat method tanpa mendefinisikan
method tersebut. Hal ini bermanfaat kalau kita tahu kelas dalam program kita harus
memberikan operasi tertentu, tetapi spesifikaasi operasi tersebut dapat berbeda-beda antara
satu subelas dengan subkelas yang lainnya.
Dalam Java kita bisa mendefinisikan method semacam ini dengan kata kunci abstract,
untuk menunjukkan bahwa methode tersebut belum dispesifikasikan. Kelas dengan satu
atau lebih method abstrak dengan sendirinya harus dinyatakan abstrak.
Contoh pada program berikut adalah pendefinisian kelas dan method abstrak untuk class
Shape, dimana kelas Shape memiliki data berupa Point yang menunjukkan titik
koordinat(x,y) dan Color yang menunjukkan tingkat RGB dari warna serta memiliki
methode Abstrak untuk menghitung luas, keliling dan cetak. Shape.java 1 public abstract class Shape 2 { 3 private Color color; 4 private Point origin; 5 6 protected Shape(Color col, Point org) 7 { 8 origin = new Point(org.getX(), org.getY()); 9 Color = new Color(col.getR(),col.getG(), col.getB()); 10 } 11 12 protected Shape(Point org) 13 { 14 origin = new Point(org.getX(), org.getY()); 16 color = new Color(0,0,0); 17 } 18 19 protected Shape() 20 { 21 origin = new Point(0.0, 0.0); 22 color = new Color(0,0,0); 23 } 24 25 public abstract double area(); 26 public abstract double perimeter(); 27 public abstract void print(); 28 29 public Color getColor() 30 { 31 return color; 32 } 33 34 public void setColor(Color col)
-
Praktikum Pemrograman Lanjut 38
35 { 36 color.setRGB(col.getR(), col.getG(), col.getB()); 37 } 38 39 public Point getOrigin() 40 { 41 return origin; 42 } 43 44 public void setOrigin(Point org) 45 { 46 origin.setPoint(org.getX(), org.getY()); 47 } 48 }
Method Abstrak dari kelas Shape mempunyai implementasi yang berbeda-beda ketika
diimplementasikan pada kelas turunannya, yaitu kelas Circle dan Rectangle. Circle.java 1 public class Circle extends Shape 2 { 3 private double radius; 4 5 public Circle() 6 { 7 super(); 8 radius = 0.0; 9 } 10 11 public Circle(final Point org, final double rad) 12 { 13 super(org); 14 radius = rad; 16 } 17 18 public double getRadius() 19 { 20 return radius; 21 } 22 23 public void setRadius(double r) 24 { 25 radius = r; 26 } 27 28 public double area() 29 { 30 return Math.PI * radius * radius; 31 } 32 33 public double perimeter() 34 { 35 return 2 * Math.PI * radius; 36 } 37 38 public void print() 39 { 40 System.out.println("Lingkaran :"); 41 System.out.println(" Pusat -> X : " +
super.getOrigin().getX() + ", Y : " + super.getOrigin().getY());
42 System.out.println(" Radius : " + radius); 43 System.out.println(" Luas : " + (Math.PI * radius *
radius)); 44 System.out.println(" Keliling : " + (2 * Math.PI * radius));
-
Praktikum Pemrograman Lanjut 39
45 System.out.println(" Warna R : " + super.getColor().getR() + ", G : " + super.getColor().getG() + ", B : " + super.getColor().getB());
46 } 47 }
Rectangle.java 1 public class Rectangle extends Shape 2 { 3 private double height; 4 private double width; 5 6 public Rectangle() 7 { 8 super(); 9 height = 0.0; width = 0.0; 10 } 11 12 public Rectangle(Point org, double h, double w) 13 { 14 super(org); 16 height = h; width = w; 17 } 18 19 public double area() 20 { 21 return height * width; 22 } 23 24 public double getH() 25 { 26 return height; 27 } 28 29 public double getW() 30 { 31 return width; 32 } 33 34 public void setHW(double h, double w) 35 { 36 height = h; width = w; 37 } 38 39 public double perimeter() 40 { 41 return 2 * (height + width); 42 } 43 44 public void print() 45 { 46 System.out.println("Segi Empat:"); 47 System.out.println(" P : " + width + ", L : " + height); 48 System.out.println(" Luas : " + (height * width)); 49 System.out.println(" Keliling : " + (2 * (height + width))); 50 System.out.println(" Nilai X : " + super.getOrigin().getX() +
", Y : " + super.getOrigin().getY()); 51 System.out.println(" Warna R : " + super.getColor().getR() +
", G : " + super.getColor().getG() + ", B : " + super.getColor().getB());
52 } 53 }
-
Praktikum Pemrograman Lanjut 40
ShapeDemo.java 1 public class ShapeDemo 2 { 3 public static void main(String [] args) 4 { 5 Point p = new Point(5,9); 6 Color co = new Color (10,10,10); 7 Circle c = new Circle(p,6); 8 Rectangle r = new Rectangle(p,5,8); 9 10 System.out.println("Luas Segiempat mula-mula:"+r.area()+"\n"); 11 System.out.println("Keliling Segiempat mula-mula : " +
r.perimeter()+ "\n"); 12 13 r.setHW(20.6 , 10.3); 14 r.print(); 16 System.out.println(); 17 18 System.out.println("Luas Lingkaran mula-mula:"+c.area()+"\n"); 19 System.out.println("Keliling Lingkaran mula-mula : " +
c.perimeter()+ "\n"); 20 21 c.setRadius(5.8); 22 c.setColor(co); 23 c.print(); 24 25 } 26 }
Soal 5.1 (employeePoly)
Implementasikan polymorphism pada class employee (pada bab sebelumnya) sehingga
methode raiseSalary() dan print() menjadi method abstrak :
employeePoly.java 1 import java.util.Date; 2 import java.text.SimpleDateFormat; 3 4 public abstract class employee 5 { 6 private String name; 7 Date hdate; 8 9 //konstruktor 10 public employeePoly(String n, Date d) 11 12 //method-methode untuk set dan get variable 13 14 public int hYear() 16 { 17 return hdate.getYear(); 18 } 19 20 public abstract void print(); 21 public abstract void raiseSalary(double persen) 22 23 }
-
Praktikum Pemrograman Lanjut 41
Soal 5.2 (staff.java)
Buatlah class staff yang inherit class employee dengan ketentuan sebagai berikut :
Terdapat variable tambahan salary dengan tipe double
Jika masa kerja dibawah 1 tahun, kenaikan gaji dihitung : salary *=1+ persen/100;
Jika masa kerja 1- 10 tahun , ada tambahan bonus sebesar 0.01 dari lama kerja
Jika masa kerja diatas 10 tahun, ada tambahan bonus sebesar 0.02 dari lama kerja
Soal 5.3 (manager.java)
Buatlah class direktur yang inherit class employee dengan ketentuan kenaikan gaji sebagai
berikut :
Selain bonus sebesar 0.5 dari lama kerja , juga mendapat tunjangan sebesar 0.1 dari
lama kerja
-
Praktikum Pemrograman Lanjut 42
LEMBAR JAWABAN
-
Praktikum Pemrograman Lanjut 43
-
Praktikum Pemrograman Lanjut 44
-
Praktikum Pemrograman Lanjut 45
-
Praktikum Pemrograman Lanjut 46
-
Praktikum Pemrograman Lanjut 47
Bab
6
Interface
6.1 Deklarasi Interface
Dengan polimorphism hanya memungkinkan untuk mewarisi sifat dari satu kelas abstrak
saja. Namun kadangkala diperlukan untuk mewarisi sifat dari lebih dari satu kelas abstrak.
Kemampuan ini disebut dengan multiple inheritance. Dalam Java, sebuah class hanya bisa
mewarisi sifat dari sebuah superclass (disebut sebagai single inheritance) dan tidak
mendukung prinsip multiple inheritance. Namun demikian, untuk mendekati prinsip
multiple inheritance ini, dalam Java terdapat Interfaces yang memiliki efek seperti multiple
inheritance. Berbeda dengan kelas abstrak, sebuah interface hanya memiliki konstanta dan
method abstrak. Syntaks untuk mendeklarasikan interface diawali dengan kata kunci
interface seperti terlihat pada contoh berikut: modifier interface InterfaceName { /** Konstanta */ /** Method abstrak */
} Contoh pada program berikut adalah pendefinisian interface Eatable, dimana interface ini
hanya memiliki sebuah method abstrak howToEat. public interface Eatable { public String howToEat(); }
6.2 Implementasi Interface
Sebuah kelas dapat mengimplementasikan sebuah interface dengan menggunakan kata
kunci implements. Program berikut adalah contoh implementasi interface Eatable pada
kelas Fish1. Fish1.java 1 class Fish1 implements Eatable { 2 int weight; 3 4 public Fish1(int w) { 5 weight = w; 6 } 7 8 public String howToEat() { 9 10 String st = "Dengan cara menggoreng atau membuat ikan baker"; 11 return st; 12 } 13 }
-
Praktikum Pemrograman Lanjut 48
Kelas Fish1 mengimplementasikan method howToEat pada interface Eatable. Program
berikut adalah contoh kelas yang melakukan instansiasi kelas Fish1. Fish1Demo.java 1 public class Fish1Demo 2 { 3 public static void main(String [] args) 4 { 5 Fish ikan = new Fish(3); 6 7 System.out.println("Cara makan ikan:"+ikan.howToEat()); 8 9 } 10 }
Jalankan program diatas dan perhatikan hasil dari eksekusi program. Dari contoh program
diatas, kemudian jelaskan perbedaan antara polimorphism dan interface.
Program berikut adalah contoh lain deklarasi dan penggunaan interface. Pada
contoh ini terdapat interface Comparable yang dapat digunakan untuk membandingkan
dua buah obyek. public interface Comparable { public boolean compareTo(Object obj); }
Interface Comparable ini diimplementasikan oleh kelas Rectangle dengan jalan
mengimplementasikan method compareTo(Object obj)yang dideklarasi dalam interface Comparable. Rectangle.java 1 public class Rectangle implements Comparable 2 { 3 4 private double height; 5 private double width; 6 7 public Rectangle() 8 { 9 height = 0.0; width = 0.0; 10 } 11 12 public Rectangle(double h, double w) 13 { 14 height = h; width = w; 16 } 17 18 19 public double getH() 20 { 21 return height; 22 } 23 24 public double getW() 25 { 26 return width; 27 }
-
Praktikum Pemrograman Lanjut 49
28 29 public void setHW(double h, double w) 30 { 31 height = h; width = w; 32 } 33 34 public double area() 35 { 36 return height * width; 37 } 38 39 public double perimeter() 40 { 41 return 2 * (height + width); 42 } 43 44 public void print() 45 { 46 System.out.println("Segi Empat:"); 47 System.out.println(" P : " + width + ", L : " + height); 48 System.out.println(" Luas : " + area()); 49 System.out.println(" Keliling : " + perimeter()); 50 } 51 52 public boolean compareTo(Object obj) 53 { 54 if (area() == ((Rectangle)obj).area()) 55 return true; 56 else 57 return false; 58 } 59 }
Program berikut adalah contoh kelas yang melakukan instansiasi kelas Rectangle. Rectangle.java 1 public class RectangleDemo 2 { 3 public static void main(String [] args) 4 { 5 Rectangle rect1 = new Rectangle(7,5); 6 Rectangle rect2 = new Rectangle(5,4); 7 8 System.out.println("Luas bidang1 : "+ rect1.area() ); 9 System.out.println("Luas bidang2 : "+ rect2.area() ); 10 System.out.println("Hasil pembandingan : "+
rect1.compareTo(rect2)); 11 } 12 }
6.3 Implementasi Multiple Interface
Seperti telah dijelaskan diatas, bahwa sebuah kelas bisa mengimplementasikan lebih dari
satu interface. Pada contoh berikut akan dideklarasikan kelas Fish yang
mengimplementasikan interface Eatable dan Comparable2. Adapun interface
Comparable2 dideklarasikan sebagai berikut:
-
Praktikum Pemrograman Lanjut 50
public interface Comparable2 { public double compareTo(Object obj); }
Deklarasi kelas Fish yang mengimplementasikan interface Eatable dan Comparable2
ditunjukkan pada program berikut. Fish.java 1 public class Fish implements Eatable, Comparable2 { 2 int weight; 3 4 public Fish(int w) { 5 weight = w; 6 } 7 8 public String howToEat() { 9 10 String st = "Dengan menggoreng atau membuat ikan bakar"; 11 return st; 12 } 13 14 public double compareTo(Object obj) { 16 return (Math.abs(weight - ((Fish)obj).weight)); 17 } 18 }
Program berikut adalah contoh kelas yang melakukan instansiasi kelas Fish. FishDemo.java 1 public class FishDemo 2 { 3 public static void main(String [] args) 4 { 5 Fish ikan1 = new Fish(3); 6 Fish ikan2 = new Fish(5); 7 8 System.out.println("Cara makan ikan : "+ikan1.howToEat()); 9 System.out.println("Beda berat kedua ikan : "+
ikan1.compareTo(ikan2)); 10 } 11 }
6.3 Penggunaan Pewarisan dan Interface
Sebuah kelas bisa mewarisi sifat dari kelas induk dan sekaligus mengimplementasikan
interface. Berikut adalah contoh implementasi kelas ComparableRectangle2 yang
mewarisi sifat dari kelas Rectangle dan mengimplementasikan interface Comparable. ComparableRectangle2.java 1 public class ComparableRectangle2 extends Rectangle2 implements Comparable 2 { 3 public ComparableRectangle2(double w, double h) { 4 super(w, h); 5 } 6 7 public boolean compareTo(Object obj) 8 { 9 if (area() == ((ComparableRectangle2)obj).area()) 10 return true; 11 Else
-
Praktikum Pemrograman Lanjut 51
12 return false; 13 } 14 }
Program berikut adalah contoh kelas yang melakukan instansiasi kelas ComparableRectangle2. ComparableRectangleDemo.java 1 public class ComparableRectDemo 2 { 3 public static void main(String [] args) 4 { 5 ComparableRectangle2 rect1 = new ComparableRectangle2(7,5); 6 ComparableRectangle2 rect2 = new ComparableRectangle2(5,7); 7 8 System.out.println("Luas bidang1 : "+ rect1.area() ); 9 System.out.println("Luas bidang2 : "+ rect2.area() ); 10 11 if (rect1.compareTo(rect2)== true) 12 System.out.println("Luas kedua bidang sama"); 13 else 14 System.out.println("Luas kedua bidang tidak sama"); 16 } 17 }
Soal 6.1
Deklarasikan kelas selain kelas Fish yang mengimplementasikan interface Eatable.
Soal 6.2
Buatlah interface Colorable yang memiliki method dengan nama howToColor(). Kemudian implementasikan interface ini pada kelas Rectangle, dimana method
howToColor() digunakan untuk memberikan warna dari bangun.
Soal 6.3
Buatlah program melakukan instansiasi kelas dari soal 6.1 dan soal 6.2.
-
Praktikum Pemrograman Lanjut 52
LEMBAR JAWABAN
-
Praktikum Pemrograman Lanjut 53
-
Praktikum Pemrograman Lanjut 54
-
Praktikum Pemrograman Lanjut 55
-
Praktikum Pemrograman Lanjut 56
-
Praktikum Pemrograman Lanjut 57
-
Praktikum Pemrograman Lanjut 58
-
Praktikum Pemrograman Lanjut 59
-
Praktikum Pemrograman Lanjut 60
Bab
7
Graphic User Interface
Dengan Java, memungkinkan untuk membuat tampilan User Interface dengan
memanfaatkan paket-paket GUI yang telah disediakan. Salah satu paket yang biasa
digunakan adalah AWT (Abstract Window Toolkit), dimana dengan AWT kita bisa
membuat berbagai prasarana dasar sepeti tombol, field input,label dll dan kemudian
membuat program interface untuk menanggapi berbagai event.
Berikut adalah contoh program penggunaan paket java.awt untuk merancang form
sederhana perhitungan Luas. TFrame.java 1 import java.awt.*; 2 import java.awt.event.*; 3 4 public class TFrame extends Frame 5 { 6 Label lbJudul; 7 Label lbPanjang; 8 Label lbLebar; 9 Label lbLuas; 10 TextField txtPanjang; 11 TextField txtLebar; 12 TextField txtLuas; 13 Button btnOK; 14 16 17 public TFrame() 18 { 19 setLayout(null); 20 21 lbJudul = new Label("Hitung Luas SegiEmpat"); 22 lbJudul.setFont(new Font("Arial", 1, 14)); 23 add(lbJudul); 24 lbJudul.setBounds(100, 30, 170, 20); 25 26 lbPanjang = new Label("Panjang :"); 27 add(lbPanjang); 28 lbPanjang.setBounds(100, 60, 62, 20);
-
Praktikum Pemrograman Lanjut 61
29 30 lbLebar = new Label ("Lebar :"); 31 add(lbLebar); 32 lbLebar.setBounds(100, 90, 70, 20); 33 34 lbLuas = new Label("Hasil :"); 35 add(lbLuas); 36 lbLuas.setBounds(100, 120, 70, 20); 37 38 txtPanjang = new TextField("0"); 39 add(txtPanjang); 40 txtPanjang.setBounds(200, 60, 60, 20); 41 42 txtLebar= new TextField("0"); 43 add(txtLebar); 44 txtLebar.setBounds(200, 90, 60, 20); 45 46 txtLuas= new TextField("0"); 47 add(txtLuas); 48 txtLuas.setBounds(200, 120, 60, 20); 49 50 btnOK = new Button("Hitung"); 51 add(btnOK); 52 btnOK.setBounds(120,150,100,20); 53 btnOK.addActionListener(new mainAction()); 54 55 addWindowListener(new WindowAdapter() { 56 public void windowClosing(WindowEvent e) { 57 System.exit(0); 58 } 59 }); 60 } 61 62 class mainAction implements ActionListener 63 { 64 65 public void actionPerformed( ActionEvent event) 66 { 67 int p1 = Integer.parseInt(txtPanjang.getText().trim()); 68 int l1 = Integer.parseInt(txtLebar.getText().trim()); 69 String luas = String.valueOf(p1*l1); 70 txtLuas.setText(luas); 71 } 72 } 73 }
Program berikut adalah contoh instansiasi dari kelas TFrame dimana window di-set dengan
ukuran 350x200 piksel. mainLuas.java 1 public class mainLuas 2 { 3 public static void main(String args[]) 4 { 5 TFrame window = new TFrame(); 6 7 window.setTitle("Hitung Luas dengan GUI Java.awt"); 8 window.setSize(350,200); 9 window.show(); 10 } 11 }
-
Praktikum Pemrograman Lanjut 62
Jalankan program diatas. Amati penggunaan listener untuk buttonOK (baris 53) yang
mengimplementasikan interface ActionListener untuk menjalankan event tertentu.
Contoh program dibawah adalah modifikasi program sebelumnya dengan memanfaatkan
komponen checkbox untuk melakukan pemilihan aksi.
TFrame2.java 1 import java.awt.*; 2 import java.awt.event.*; 3 4 public class TFrame2 extends Frame 5 { 6 TextField txtPanjang, txtLebar,txtLuas; 7 CheckboxGroup cbg; 8 Checkbox cbL,cbK; 9 Label lbJudul,lbPanjang,lbLebar,lbLuas; 10 11 public TFrame2() 12 { 13 setLayout(null); 14 16 lbJudul = new Label("Hitung Luas dan Keliling"); 17 lbJudul.setFont(new Font("Arial", 1, 14)); 18 add(lbJudul); 19 lbJudul.setBounds(100, 30, 170, 20); 20 21 lbPanjang = new Label("Panjang :"); 22 add(lbPanjang); 23 lbPanjang.setBounds(100, 80, 62, 20); 24 25 lbLebar = new Label ("Lebar :"); 26 add(lbLebar); 27 lbLebar.setBounds(100, 120, 70, 20); 28 29 lbLuas = new Label("Hasil :"); 30 add(lbLuas); 31 lbLuas.setBounds(100, 150, 70, 20); 32 33 txtPanjang = new TextField("0"); 34 add(txtPanjang); 35 txtPanjang.setBounds(200, 80, 60, 20); 36 37 txtLebar= new TextField("0"); 38 add(txtLebar); 39 txtLebar.setBounds(200, 120, 60, 20); 40 41 txtLuas = new TextField("0");
-
Praktikum Pemrograman Lanjut 63
42 add(txtLuas); 43 txtLuas.setBounds(200, 150, 60, 20); 44 45 cbg = new CheckboxGroup(); 46 cbL = new Checkbox("Luas",cbg, false); 47 this.add(cbL).setBounds(90, 190, 100, 20); 48 49 cbK = new Checkbox("Keliling",cbg, false); 50 this.add(cbK).setBounds(200, 190, 100, 20); 51 52 cbL.addItemListener(new mainAction()); 53 cbK.addItemListener(new mainAction()); 54 55 56 addWindowListener(new WindowAdapter() 57 { 58 public void windowClosing(WindowEvent e) { 59 System.exit(0); 60 } 61 }); 62 } 63 64 //ItemListener 65 class mainAction implements ItemListener 66 { 67 public void itemStateChanged(ItemEvent ev) 68 { 69 int p1 = Integer.parseInt
(txtPanjang.getText().trim()); 70 int l1 = Integer.parseInt
(txtLebar.getText().trim()); 71 72 Object source = ev.getItemSelectable(); 73 74 if (source == cbL) 75 { 76 txtLuas.setText(String.valueOf(p1*l1)); 77 } 78 else if (source == cbK) 79 { 80 txtLuas.setText(String.valueOf(2*
(p1+l1))); 81 } 82 } 83 } 84 }
mainLuas2.java 1 public class mainLuas2 2 { 3 public static void main(String args[]) 4 { 5 TFrame2 window2 = new TFrame2(); 6 7 window2.setSize(400,250); 8 window2.setVisible(true); 9 window2.show(); 10 } 11 }
-
Praktikum Pemrograman Lanjut 64
Soal 7.1 (HitungGaji.java) Buatlah program untuk menghitung gaji karyawan dengan tampilan seperti berikut. Adapun ketentuan penghitungan bonus dan tunjangan adalah sebagai berikut : Gaji Pokok
Staff : 1.000.000 Manager : 5.000.000 Direktur : 10.000.000
Bonus : Staff jika lama kerja < 1 th = 0
Jika lama kerja 1 10 th = 5% * gaji_pokok jika lama kerja > 10 th = lama_kerja/100 * gaji_pokok
Manager (5% + ((lama_kerja / 100 )) * gaji_pokok
Direktur (10% + ((lama_kerja / 100 )) * gaji_pokok Tunjangan :
Staff : 0 Manager : 5% * gaji_pokok Direktur : 10% * gaji_pokok
-
Praktikum Pemrograman Lanjut 65
LEMBAR JAWABAN
-
Praktikum Pemrograman Lanjut 66
-
Praktikum Pemrograman Lanjut 67
-
Praktikum Pemrograman Lanjut 68
-
Praktikum Pemrograman Lanjut 69
-
Praktikum Pemrograman Lanjut 70
-
Praktikum Pemrograman Lanjut 71
-
Praktikum Pemrograman Lanjut 72
-
Praktikum Pemrograman Lanjut 73
Bab
8
Graphic User Interface Lanjut
Selain dengan memanfaatkan paket java.awt, untuk membuat user interface di Java juga bisa
memanfaatkan paket javax.swing. Pada contoh berikut merupakan pemanfaatan komponen jtable
untuk membuat user interface untuk menampilkan data dalam bentuk tabel.
TableData.java 1 import javax.swing.*; 2 import javax.swing.table.AbstractTableModel; 3 import javax.swing.table.TableColumn; 4 import java.awt.*; 5 import java.awt.event.*; 6 7 public class TableData extends JFrame 8 { 9 public TableData() 10 { 11 super("Contoh penggunaan jtable"); 12 13 MyTableModel myModel = new MyTableModel(); 14 JTable table = new JTable(myModel); 16 table.setPreferredScrollableViewportSize(new
Dimension(500, 70)); 17 18 JScrollPane scrollPane = new JScrollPane(table); 19 getContentPane().add(scrollPane,
BorderLayout.CENTER); 20 21 addWindowListener(new WindowAdapter() { 22 public void windowClosing(WindowEvent e) { 23 System.exit(0); 24 } 25 }); 26 } 27 } 28 29 class MyTableModel extends AbstractTableModel 30 { 31 final String[] columnNames = {"ID", "Name","Address","Sex"}; 32 33 final Object[][] data = { 34 {"S001","Mariana","Malang",new Boolean(false)}, 35 {"S002","Tatiana","Surabaya",new Boolean(false)}, 36 {"S003","Harry","Jakarta",new Boolean(true)}, 37 {"M001","Zakhy","Bandung",new Boolean(true)}, 38 {"D001","Angela","Bogor",new Boolean(false)}
-
Praktikum Pemrograman Lanjut 74
39 }; 40 41 public int getColumnCount() { 42 return columnNames.length; 43 } 44 45 public int getRowCount() { 46 return data.length; 47 } 48 49 public String getColumnName(int col) { 50 return columnNames[col]; 51 } 52 53 public Object getValueAt(int row, int col) { 54 return data[row][col]; 55 } 56 57 public Class getColumnClass(int c) { 58 return getValueAt(0, c).getClass(); 59 } 60 61 public boolean isCellEditable(int row, int col) { 62 if (col < 3) { 63 return true; 64 } else { 65 return false; 66 } 67 } 68 }
TableDataDemo.java 1 public class TableDataDemo 2 { 3 public static void main(String[] args) 4 { 5 TableData frame = new TableData(); 6 frame.pack(); 7 frame.setVisible(true); 8 } 9 }
Contoh berikut adalah pengembangan dari contoh diatas dengan menambahkan button untuk
menambah dan menghapus baris. Pada saat dijalankan default table adalah null (tidak ada isi pada
tabel).
Perhatikan keyword implements pada baris 8, dimana sebuah kelas bisa mengimplementasikan
lebih dari satu interface. Hal ini mendekati fungsi pewarisan ganda.
-
Praktikum Pemrograman Lanjut 75
TableAdd.java 1 import javax.swing.*; 2 import java.awt.*; 3 import java.awt.event.*; 4 import javax.swing.table.*; 5 import java.util.*; 6 import javax.swing.event.*; 7 8 class TableAdd implements ActionListener, TableModelListener 9 { 10 JFrame frame; 11 JTable table; 12 Vector rows,columns; 13 DefaultTableModel tabModel; 14 JScrollPane scrollPane; 16 JLabel lblMessage; 17 JButton cmdAdd,cmdDelete,cmdSetValue,cmdGetValue; 18 JPanel mainPanel,buttonPanel; 19 20 TableAdd() 21 { 22 rows=new Vector(); 23 columns= new Vector(); 24 String[] columnNames = 25 { 26 "ID", 27 "Name", 28 "Address", 29 "Sex", 30 }; 31 32 addColumns(columnNames); 33 34 tabModel=new DefaultTableModel(); 35 tabModel.setDataVector(rows,columns); 36 37 table = new JTable(tabModel); 38 scrollPane= new JScrollPane(table); 39 40 table.setRowSelectionAllowed(false); 41 42 table.getModel().addTableModelListener(this); 43 44 lblMessage=new JLabel(""); 45 46 buttonPanel=new JPanel(); 47 cmdAdd=new JButton("Add Row"); 48 cmdDelete=new JButton("Delete") ; 49 50 buttonPanel.add(cmdAdd); 51 buttonPanel.add(cmdDelete); 52 53 cmdAdd.addActionListener(this); 54 cmdDelete.addActionListener(this); 55 56 mainPanel=new JPanel(); 57 frame=new JFrame("Simple Table Example"); 58 frame.setSize(800,600); 59 frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 60 mainPanel.setLayout(new BorderLayout()); 61 mainPanel.add("Center",scrollPane); 62 mainPanel.add("South",buttonPanel); 63 mainPanel.setBackground(Color.white); 64 buttonPanel.setBackground(Color.white); 65 table.getParent().setBackground(Color.white); 66 frame.getContentPane().add(mainPanel); 67 frame.setVisible(true);
-
Praktikum Pemrograman Lanjut 76
68 } 69 70 public void addColumns(String[] colName) 71 { 72 for(int i=0;i
-
Praktikum Pemrograman Lanjut 77
Soal 8.1
Modifikasi tabel contoh pada TableAdd.java sehingga tampilan awalnya adalah sebagai berikut :
-
Praktikum Pemrograman Lanjut 78
LEMBAR JAWABAN
-
Praktikum Pemrograman Lanjut 79
-
Praktikum Pemrograman Lanjut 80
-
Praktikum Pemrograman Lanjut 81
-
Praktikum Pemrograman Lanjut 82
-
Praktikum Pemrograman Lanjut 83
-
Praktikum Pemrograman Lanjut 84
-
Praktikum Pemrograman Lanjut 85