Modul Praktikum Pemrograman Lanjut

download Modul Praktikum Pemrograman Lanjut

of 86

Transcript of Modul Praktikum Pemrograman Lanjut

  • 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