Membuat Custom JTable

Pasti semua yang udah pengalaman buat aplikasi Destop atau Swing pernah menggunakan JTable. Mmmmm… tau sendirikan bagaimana susahnya ngatur tampilan datanya? Atau mungkin yang baru belajar Java dan coba-coba pake JTable pasti langsung kecewa. Apalagi kalo mereka yang udah terbiasa dengan Visual basic pasti lebih kecewa lagi, karena Table di VB jauh lebih mudah digunakan.

Pada JTable swing kita akan kesulitan mengatur tampilan seperti untuk perataan teksnya (KIRI, TENGAH, KANAN). Atau mungkin kalo kebetulan data berupa currency (uang) yang butuh pemisah ribuan di JTable agak susah kita lakukan 😦

jtable.png

Nah pada tulisan saya kali ini akan mencoba menunjukan bagaimana membuat Custome JTable yang dapat kita format datanya (Rata kiri/kanan/tengah) dan format untuk menampilkan data currency.

JTable cell dirender oleh cell renderer yang merupakan class-class yang mengimplementasikan interface TableCellRenderer. Interface ini mendefinisikan sebuah method yang akan mengembalikan referensi komponen yang akan melakukan operasi render/drawing. Nah untuk membuat custome renderer tentunya kita harus mengimplement interface ini atau mengextends class DefaultTableCellRenderer.

Membuat Custom Render
Berikut ini adalah class customer renderer untuk Number :

<br />
public class NumberRenderer extends DefaultTableCellRenderer{<br />
public NumberRenderer() {<br />
super();<br />
setHorizontalAlignment(SwingConstants.RIGHT);<br />
}<br />
public void setValue(Object value) {<br />
if ((value != null) &amp;&amp; (value instanceof Number)) {<br />
Number numberValue = (Number) value;<br />
NumberFormat formatter = NumberFormat.getIntegerInstance();<br />
value = formatter.format(numberValue.intValue());<br />
}<br />
super.setValue(value);<br />
}<br />
}<br />

Selanjutnya kita buat Custome renderer untuk Currency

<br />
public class CurrencyRenderer extends DefaultTableCellRenderer{<br />
public CurrencyRenderer() {<br />
super();<br />
setHorizontalAlignment(SwingConstants.RIGHT);<br />
}<br />
public void setValue(Object value) {<br />
if ((value != null) &amp;&amp; (value instanceof Number)) {<br />
Number numberValue = (Number) value;<br />
NumberFormat formatter = NumberFormat.getNumberInstance();<br />
value = formatter.format(numberValue.doubleValue());<br />
}<br />
super.setValue(value);<br />
}<br />
}<br />

Berikutnya Custome renderer untuk Center dan Right align

<br />
public class CenterRenderer extends DefaultTableCellRenderer{<br />
public CenterRenderer() {<br />
super();<br />
setHorizontalAlignment(SwingConstants.CENTER);<br />
}<br />
}</p>
<p>public class RightRenderer extends DefaultTableCellRenderer{<br />
public RightRenderer() {<br />
super();<br />
setHorizontalAlignment(SwingConstants.RIGHT);<br />
}<br />
}<br />

Nah setelah semua custome renderernya selesai, tugas selanjutnya kita buatkan Custome JTable (extends JTable) yang akan menggunakan class-class Custome renderer di atas.

</p>
<p>public class CustomeTable extends JTable {</p>
<p>private DefaultTableModel model;<br />
private TableColumnModel tcm;<br />
private TableColumn tc;<br />
public static int CURRENCY = 0;<br />
public static int NUMBER = 1;<br />
public static int RIGHT = 2;<br />
public static int CENTER = 3;<br />
public static int DATE = 4;</p>
<p>/** Creates a new instance of CustomeTable */<br />
public CustomeTable(String title[], Object data[][]) {<br />
model = new DefaultTableModel(data, title);<br />
this.setModel(model);<br />
tcm = this.getColumnModel();</p>
<p>}</p>
<p>/**<br />
* Memformat column tertentu &lt;br&gt;<br />
* @param column nomor column dimulai dari 0<br />
* @param format 0=currency format, 1=number format, 2=rata kanan, 3=rata kiri<br />
*/<br />
@SuppressWarnings(&quot;empty-statement&quot;)<br />
public void setColumnFormat(int column, int format) {<br />
tc = tcm.getColumn(column);<br />
switch (format) {<br />
case 0:<br />
tc.setCellRenderer(new CurrencyRenderer());<br />
break;<br />
case 1:<br />
tc.setCellRenderer(new NumberRenderer());<br />
break;<br />
case 2:<br />
tc.setCellRenderer(new RightRenderer());<br />
break;<br />
case 3:<br />
tc.setCellRenderer(new CenterRenderer());<br />
break;<br />
case 4:<br />
tc.setCellRenderer(new DateRenderer());<br />
break;<br />
}<br />
;</p>
<p>}</p>
<p>/**<br />
* Mengatur lebar column tertentu<br />
* @param column nomor column dimulai dari 0<br />
* @param width lebar column yang diinginkan<br />
*/<br />
public void setColumnWidth(int column, int width) {<br />
tc = tcm.getColumn(column);<br />
tc.setPreferredWidth(width);<br />
}</p>
<p>/**<br />
* Mengaktirfkan Table agar bisa dishortir<br />
*/<br />
public void activateShorter() {<br />
RowSorter&lt;TableModel&gt; sorter = new TableRowSorter&lt;TableModel&gt;(model);<br />
this.setRowSorter(sorter);<br />
}<br />
}</p>
<p>

OK sekarang saatnya kita coba gunakan class CustomerTable ini dalam aplikasi seperti di awal tulisan ini.

</p>
<p>public class Tester extends javax.swing.JFrame {</p>
<p>/** Creates new form Tester */<br />
public Tester() {<br />
initComponents();<br />
Object data[][] = {<br />
{&quot;1&quot;, &quot;Bambang Pamungkas&quot;, &quot;Salatiga&quot;, 2000000000},<br />
{&quot;2&quot;, &quot;Ronaldo&quot;, &quot;Brazil&quot;, 1000000000},<br />
{&quot;3&quot;, &quot;Kaka&quot;, &quot;Brazil&quot;, 230000000},<br />
{&quot;4&quot;, &quot;Slamet&quot;, &quot;Solo&quot;, 2000001}<br />
};<br />
String title[] = {&quot;No.&quot;,&quot;Nama&quot;,&quot;Alamat&quot;,&quot;Pendapatan&quot;};</p>
<p>this.table = new CustomeTable(title, data);</p>
<p>// mengubah lebar column<br />
table.setColumnWidth(0,10);</p>
<p>//rata tengah<br />
table.setColumnFormat(2, CustomeTable.CENTER);</p>
<p>//currency format</p>
<p>table.setColumnFormat(3, CustomeTable.CURRENCY);</p>
<p>// table dapat dishort<br />
table.activateShorter();</p>
<p>this.scroll.setViewportView(table);</p>
<p>}<br />
CustomeTable table;</p>
<p>//code-code program yang lain ....</p>
<p>}</p>
<p>

custome-table.png

Perhatikan perubahan yang terjadi 😀 sekarang kita memiliki Table yang lebih baik karena menampilkan format data sesuai dengan yang kita inginkan.

Maaf kalo source codenya berantakan..

happy coding 😀

Advertisements

Icon destop Ubuntu

Hari ini, lagi gak ada kerjaan serius jadi iseng-iseng download wallpaper di internet 😀 Lumayan dapat beberapa wallpaper yang bagus.. Tapi sayang begitu pasang di destop Ubuntu jadi kurang bagus soalnya ada icon-icon HD yang nongol 😦

screenshot.png

Nah akhirnya mondar-mandir deh di google… setelah obrak-abrik sana-sini akhirnya ketemu deh 😀 Nah berikut langkah-langkah ngilangin icon-icon perusak pemandangan itu hehehe

  1. Buka console
  2. Ketik perintah gconf-editor
  3. Nanti akan ditampilkan window Configuration Editor. Pilihlah app >>nautilus >> desktop
  4. Nah tinggal kita lepas deh centangan untuk Volumes_visible

:O

Update Jamu at Salatiga

Ini Update terbaru tentang kegiatan Jamu (Java MetUp) di UKSW Salatiga)

Topik:

  1. OOP in Java (Deny, Yogyakarta)
  2. Intro to Java Web Programming (Hendro, Salatiga)

Tgl/Waktu:

  1. Sabtu, 26 Januari 2008  pk. 10.00 s/d 12.00 WIB

Tempat:

Kampus UKSW Salatiga, Gedung GX103

Acara ini GRATISSS!! dan santai..

NB: Setelah acara akan kita bicarakan tentang kegiatan JUG-Joglosemar selanjutnya

bravo Jugers!!!

Scope variabel

Kebetulan dimilis jug-joglosemar ada yang bertanya tentang Scope Variabel di Java. Nah mumpung ada waktu senggang mending aku post ke blog. Scope varibel dapat dibedakan menjadi 2 yaitu: variabel yang dideklarasikan di dalam blok class dan variabel yang dideklarasikan dalam blok kode.

Variabel yang dideklarasikan dalam blog class akan dikenali oleh seluruh bagian class tsb. Bahkan variabel ini juga dapat diakses dari luar classnya tetapi tergantung dari modifiernya. Mengenai
modifier variabel akan saya jelaskan di bawah.

Variabel yang didiklarasikan di dalam blok kode tertentu, hanya akan dikenali di dalam blok kode tersebut saja. Untuk lebih jelasnya perhatikan contoh berikut:

public class Scope{
   static int x=10;
   public static void main(String[] args){
      int a = 5;
 // variabel x dapat diakses
 System.out.println("Nilai x="+x);
 System.out.println("Nilai a="+a);
 //nested blok
 {
    int b = 8;
    // variabel x masih dikenali
    System.out.println("Nilai x="+x);
           // variabel a juga dikenali
    System.out.println("Nilai a="+a);
 	   System.out.println("Nilai b="+b);
       }
 //variabel b tidak dikenali
 System.out.println("Nilai b="+b);
   }
}

Di atas saya menyebutkan bahwa variabel yang dideklarasikan di blok class dapat diatur hak aksesnya dari luar class dengan modifier, apakah variabel tsb boleh diakses atau tidak.Penggunaan modifier berfungsi untuk melakukan enkapsulasi (membungkus data) pada objeck. Dengan menggunakan modifier kita dapat menentukan siapa saja yang boleh menggunakan atau mengakses member dari suatu objek (termasuk variabel/field).

Bentuk pendeklarasiannya adalah

[modifier] [tipe data] namVariabel;

Berikut ini adalah daftar modifier yang dapat digunakan:

  1. Default (tanpa modifier), visible atau dapat diakses hanya dari class lain dengan package yang sama.
  2. public, visible dari semua class
  3. private, visible hanya di dalam class itu sendiri
  4. protected, visible dari class lain dengan package yang sama dan dari subclassnya.

Contoh:

package com;
class A{
    int a;               //defult, dapat diakes oleh class A sendiri dan class B
    private int b;   //private, hanya dapat diakses oleh class A
    public int c;     //public, dapat diakses oleh class A,B,C dan D
    protected int d; //protected, dapat diakses oleh class A,B dan D
}

package com;
class B{
}

package org;
class C{
}

package other;
class D extends A{
}

Demikian sedikit tentang scope variabel di Java.

Semoga bermanfaat.

Installasi jdk 6 dan Netbeans di Ubuntu Gutsy Gibbon

Karena ada permintaan tentang bagaimana Menginstal Jdk 6 dan Netbeans di Ubuntu Gusty Gibbon nah skarang aku sempatin deh untuk nulis 😀

Berikut langkah-langkah installasi Jdk 6 :

  1. Downloadlah distribusi JDK 6 dari site Sun Microsystem.
  2. Silahkan ekstrak file downloadtan tersebut ke Home folder misalnya.
  3. Bukalah terminal atau console
  4. Ketiklah perintah berikut

        $cd /home/hendro
$sudo mv jdk1.6.0_03 /usr/lib
$sudo update-alternatives –install /usr/bin/java java    /usr/lib/jdk1.6.0_03/bin/java 300
$sudo update-alternatives –config java

Diterminal akan ada pilihan seperti berikut ini

Selection Altenatives

————————————

  1. usr/bin/gij-wrapper-4.1
  2. /usr/lib/jdk1.6.0_03/bin/java

Press enter to keep the default[*], or type selection number : 2

Using /usr/lib/jdk1.6.0_3/bin/java to provide ‘java’.

Saya pilih 2 untuk JDK yang baru saya install. Setelah itu silahkan lakukan pengecekan apakah Java sudah terinstal dengan mengetikan $java -version diterimal. Jika sudah benar terinstall maka akan ada informasi yang menunjukan Java 6 sudah terinstal.

Selanjutnya untuk menginstal Netbeans adalah sbb:

  1. Download Netbeans dari site netbeans.org
  2. Ketik perintah:

$chmod +x <file download netbeans>

$sudo ./<file download netbeans>

Ok beres.. sekarang Ubuntu anda sudah terinstal JDK 6 dan Netbeans 😀

Semoga bermanfaat.

Bistek Update–> JaMu

Hallo Jugers (sebutan pengguna Java di Indo),

Nanti tanggal 26 Januari 2008, kita di Salatiga mo ngadain Jamu (Ketemu bareng bahas Java). Sebenarnya ini udah kali ke 2, yang pertama kemarin november 2007. Nah kali ini rencananya akan membahas yang newbie banget:

1. OOP dengan Java (oleh Deny dari Jogja)

2. Web Programming di Java (Me)

Kalo yang berdomisili di sekitar Salatiga, monggo silahkan datang ya.. GRATISSS!!  Tempatnya di UKSW tgl 26 Januari 2008, jam 10.00 am sampai selesai..

Kita juga akan banyak membahas mengenai kegiatan-kegiatan selanjutnya setelah pertemuan Jamu. Oh ya silahkan bergabung di milis jug-joglosemar@yahoogroups.com