Cara mudah Menyesuaikan Lebar Kolom JTable-Swing | Tempat Belajar dan Berbagi Pengetahuan Java dan PHP
Home » , , , » Cara mudah Menyesuaikan Lebar Kolom JTable-Swing

Cara mudah Menyesuaikan Lebar Kolom JTable-Swing

Dipostingkan Oleh Ridwan Labs pada Sabtu, 25 Januari 2014 - Diupdate Pada: 1/25/2014

Apa yang paling menyebalkan saat membuat Tabel di Java? Yup menyesuaikan lebar kolom. Secata default, java akan membagi rata lebar tabel dengan jumlah kolom yang ada. Misalnya, terdapat 5 kolom maka lebar setiap kolom akan menjadi 20% dari keseluruhan lebar kolom.
Sebenarnya, Kita dapat menggunakan method:
setPreferredWidth(lebar_kolom);

Untuk menyesuaikan kolom, tapi kemudian semua ini akan terasa menyebalkan ketika kita harus mengatur lebar kolom satu per satu untuk setiap kolomnya. Bayangkan jika kita mempunyai 10 tabel dengan banyak kolom didalamnya, yup akan terasa menjengkelkan.


Kenapa tidak kita buat saja class yang dapat mengatur lebar kolom yang otomatis menyesuaikan dengan lebar isi??.


Ok, idenya kayak gini:

Kita akan buat sebuah class yang nantinya class ini akan mempunyai behaviour berikut:
  1. Menghitung jumlah kolom yang ada, dengan mengambil model kolom dengan method getColumnModel();

  2. Class ini akan menghitung lebar maksimal dari isi tabel di tiap kolom, kemudian menjadiknnya sebagai lebar kolom. Misal untuk tabel diatas, class akan mencari isi tabel paling panjang untuk kolom nama, kemudian setelah selesai, maka class akan menjadikannya sebagai lebar dari kolom nama.

Ok, sekarang kita mulai.Pertama, buat sebuah class (namanya terserah), kemudian buat sebuah method di dalamnya,

public void buatKolomSesuai(JTable t){
// isi kolom
}


Kedua, ambil model kolom dari tabel
TableColumnModel modelKolom=t.getColumnModel();


Ketiga, Cari lebar maksimam dari tiap kolom, dan jadikan sebagai lebar kolom dengan method setPreferredWidth(lebar_kolom);


for(int kol=0; kol <>
int lebarKolomMax=0;
for(int baris=0;baris

TableCellRenderer rend=t.getCellRenderer(baris,kol);
Object nilaiTablel=t.getValueAt(baris,kol);
Component comp=rend.getTableCellRendererComponent(t,nilaiTablel,false,false,baris,kol);
lebarKolomMax=Math.max(comp.getPreferredSize().width,lebarKolomMax);
}//akhir for baris
TableColumn kolom=modelKolom.getColumn(kol);
kolom.setPreferredWidth(lebarKolomMax);
}//akhir for kolom
}

Yup, tiga langkah sederhana untuk membuat tabel, dengan lebar kolom yang sudah di sesuaikan.

Berhasil gak neh?

Kita buktikan:
Buat sebuah class untuk menampilkan sebuah tabel. (yang punya Netbeans, pake aja, biar gak pusing bikin tabelnya :)).

Buat sebuah tabel trus isi deh tabelnya dengan data yang temen-temen inginkan. Yup, setelah tabelnya di instansiasi kemudian implementasikan classnya:Nih code lengkapnya:


Jreng-jreng........................... hasilnya:




Selamat mencoba ................................... and keep trying.
Share this article :

16 komentar:

  1. nmpang nanya lagi y brow,^_^. pas saya coba nampilin data pada kolom pake getRowcount terjadi kesalahan, datanya ga' mau tampil. tpi setelah saya balikin ke bentuk defaultTableModel pake printah getRowcountnya ga' error, datanya mau tampil. tapi bentuk tampilan tabel-nya jelek deh, isi tabel-nya terpotong lagi.. yang saya ingin tanyakan, apa perintah yang harus saya buat di event button-nya??,

    script yang saya coba di button skarang :

    int ht = mode.getRowCount();
    for (int i = 0;i < ht;i++){mode.removeRow(0);}

    untuk menampilkan datanya :

    String[] data={a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q,r,s,t,u,v,z};
    mode.addRow(data);

    makasih untuk penjelasannya y brow...

    BalasHapus
  2. &(&*^&%&%^$ Bntar2 maksud pertanyaannya gimana neh, jadi bingung hehe

    BalasHapus
  3. maksudnya gini brow,.. listing program untuk lebar kolom :

    public tabelmhs(java.awt.Frame parent, boolean modal) {
    super(parent, modal);
    initComponents();

    TableColumnModel modelKolom = tabel.getColumnModel();
    dst....tak potong y brow, klo ditulis semua kepanjangan...
    }

    sdangkan listing di event button :

    int ht = mode.getRowCount();
    for (int i = 0;i < ht;i++){mode.removeRow(0);}
    |
    |
    isi program
    |
    |
    String z = rs.getString(21);
    String[] data={z};
    mode.addRow(data);

    masalahnya, pas saya running programnya terjadi error,.. tapi setelah saya ganti listing program yang saya download dari pnya brow kemarin(listing program di bawah initComponents diatas), dengan listing dibawah ini :

    tabel = new javax.swing.JTable();
    Object[] row = {};
    mode = new DefaultTableModel(null, row);
    tabel.setBorder(null);
    tabel.setModel(mode);
    scrollPane1.setViewportView(tabel);
    tabel.setAutoResizeMode(0);

    programnya mau di running, tpi bentuk hasil tampilan tabelnya ga' bagus, kolom yang dihasilkannya masih standar default netbeans.

    bisa di jelasin lagi ga' brow caranya, supaya tampilan kolomnya lebih bagus. dengan menggunakan data asli, yang diambil dari database, trus untuk menampilkan data ke tabelnya pakai event button..

    o y satu lagi brow, klo class dari frame yang lain ga' kebaca di frame pemanggilnya, itu penyebabnya apa y?, padahal nama class yang ingin dipanggil telah sama. kesalahnnya seperti ini :

    cannont find symbol constructor tabelmhs(akbid.akbid,boolean)in akbid.tabelmhs

    sebelumnya saya ucapkan terima kasih, sory pertanyaan-nya kepanjangan lagi brow.^_^.

    BalasHapus
  4. Ohhh, gitu tho :) heheh kirain.
    Kalo pake netbeans, supaya datanya sesuai dengan yang punya kita, maka model dari tabel mesti di reset dulu, caranya pada bagian properties, cari model trus set to default. nah baru deh dikasih data. Tapi untuk melakukan ini sebaiknya kita buat Class tabel model sendiri

    caranya:
    buat sebuah Class trus extends kan AbstractTableModel.
    Misal:
    public class TabelModel extends AbstractTableModel{
    //isi class
    //biasanya berisi methos
    //dari class AbstractTableModel
    }

    Nah datanya nanti diloadkan dari class ini. nah baru nanti di Frame atau di Dialog set model tabelnya pake class model yang kita buat tadi. setelah itu gunakan Class Sesuaikan Kolom.

    kalo perlu Coba Pelajari lebih dalam tentang Konsep MVC (Model View Controler) ^_^. intinya sih konsep ini mengajarkan pada kita untuk selalu memisahkan antara GUI, Model dan Control terhadap Suatu Class.

    dengan memisahkan interface dan model, kita dapat lenih mudah memanipulasi data, seperti sorting, filtering, dan lainnya.
    Gimana??

    Ok kalo class yang gak ditemukan dapat dilakukan beberapa kemungkinan:
    1. pastikan class berada pada package yang benar
    2. pastikan class yang kita akses mempunyai akses yang dibolehkan (public, private atau protected)
    3. pastikan class yang kita akses memiliki constructor yang dimaksud.

    Kalau dilihat dari pertanyaannya sik kayaknya class nya gak punya Constructor yang dimaksud deh.

    Ok deh Cape juga yah, semoga membantu deh. and Keep Learning Brow. Sorry juga jawabannya kepanjangan kwkwkwkw

    BalasHapus
  5. waduh...terima kasih mas... tutorialnya sangat berguna...dari kemaren nyariin akhirnya ketemu juga

    terima kasih yo mas

    BalasHapus
  6. brow onta, mo nanya nih, saya memiliki dua buah jtabel tabel pertama adalah tabel sumber data-nya, sementara tabel kedua, adalah tabel untuk menampung datanya. saya membuat type data boolean untuk melakukan penseleksiannya(checkbox) pada tabel pertama(tabel sumber). pertanyaanya, gimana cara-nya nampilin data yang diseleksi pake checkbox tersebut, untuk pindah ke tabel ke dua(tabel penampungya)..makasih brow untuk penjelasannya....

    BalasHapus
  7. Tempatkan/tambahkan data2 yang di checkbox pada table pertama pada sebuah array, nah pada tabel kedua, load datanya jangan dari tabel pertama tapi dari Array, semoga membantu

    BalasHapus
  8. Tempatkan/tambahkan data2 yang di checkbox pada table pertama pada sebuah array, nah pada tabel kedua, load datanya jangan dari tabel pertama tapi dari Array, semoga membantu

    BalasHapus
  9. Maaf Brow Onta Agak Tunanit Nih..hehehe, Maksud letakin Di array pada tabel pertama n meload-nya balik apa gtu...Kurang Tanggep Nih Brow....hehehe...Bisa Di jelasin Lebih Detail Lagi Ga....O y Brow Kalo Kita Pengen Ngapus Data Di Tabel tanpa Ngedelet(removeRow) Row Gimana Ya...?..Thank's

    BalasHapus
  10. MMMMM, kan tiap table dalam java memiliki Tabel model, Tabel modelnya kebanyakan menggunakan Array.

    Ok, Mr.Skhai,
    1. Intansiasikan sebuah Array/Vektor terlebih dahulu (tipe arraynya sesuaikan dengan tipe datanya ataw klo mo lbh mudah buat sebuah beans).
    2. untuk tabel pertama, tambahkan action pada tableny. Jadi ketika di klik pada checkbox, jadikan row dalam keadaan terpilih(Jadi juka di klik beberapa checkbok, data yang di checkbox itu akan otomatis terpilih/terseleksi).
    3.untuk mengisi tabel 2, ambil data yang sudah terseleksi pada tabel 1 dengan cara
    int[] rowc = jTable1.getSelectedRows();
    for(int i = 0; i < rowc.length; i++){
    //Ambil data dari tabel 1
    }
    //masukan data kedalam array yang telah di bentuk pada no 1

    4. untuk tabel penampunya gunakan array pada no 1 sebagai tablemodelnya.

    Semoga membantu

    BalasHapus
  11. Makasih brow tuk jawabannya, udah agak faham...hehehee.... tapi brow nanya lagi nih,...agak keluar sih dari masalah jtabel...brow saya kpengen ngejumlahin mata uang rupiah brow, gini kasusnya...kmarin saya coba nambahin bilangan Rp.1.300.000 dengan Rp.1.300.000, type data yang saya kasih integer, tapi ga mau nampil hasilnya, nah setelah saya fikir2 ternyata integer tu kan buat bilangan bulat doank jadi ga' bisa buat char ditambahin ma titik(.), nah saya coba pake double juga ga' bisa brow, gimana cara nambahinnya brow, trus make jformatedfield juga ga mau brow...kira2 salahnya dimana brow supaya hasil penjumlahan-nya tepat jadi = Rp.1.600.000 gitu brow...makasih sebelumnya...

    BalasHapus
  12. Rp.1.300.000 itu bukan integer, kalau mau rubah dulu Rp.1.300.000 menjadi 1300000 nah baru di tambahkan, setelah di tambahkan (misalkan 2600000) baru di format kembali menjadi Rp. 2.600.000, gitu brow, soal mo pake JTextFiel or JFormattedText Sama Saja hehe

    BalasHapus
  13. siiip brow,..tapi ntar kalo misal masalahnya di nampilinnya n ngejumlahinnya langsung dari tabel gimana brow...?

    BalasHapus
  14. Sebenarnya gampang brow, yang jelas coba perdalam dulu antara tablemodel dan jtable, sebenarya yang berperan itu adalah Table model, jadi yang JTable itu hanya menampilkan, jadi kalau mau memanipulasi data lakukan pada tabel modelnya, setelah datanya dimanipulasi (+, -, /, *) baru di tampilkan di JTable bro

    BalasHapus
  15. Kodenya gak jelas bro,
    Tolong indentasi nya dibenerin. Biar semuanya pada ngerti

    Trims

    BalasHapus
  16. mas linknya udah expired bisa tolong minta link yang baru gak buat srcJtable.zip nya atau please kirim k email aku saptoraharjo85@yahoo.com
    terima kasih banyak

    BalasHapus

Cari Artikel



 
Support : Admin
Copyright © 2013. Tempat Belajar dan Berbagi Pengetahuan Java dan PHP - All Rights Reserved
Template Created by Creating Website Modified by CaraGampang.Com
Proudly powered by Blogger