Seperti yang sudah diketahui, kebanyakan programer java mengalami kesulitan dalam menangani output data terutama yang terdapat dalam JTable, hal ini dikarenakan kita harus mengatur lebar kolom secara manual agar data yang ditampilkan bisa terlihat dengan baik (Karena secara otomatis java akan memberikan lebar yang sama untuk setiap kolom).
Namun pekerjaan ini bukan pekerjaan yang mudah, mengingat biasanya jumlah table dalam aplikasi biasanya sangat banyak. Oleh karena itu saya membuat sebuah Class yang bisa digunakan untuk mengatur lebar kolom JTable secara otomatis (lebar kolom akan menyesuaikan dengan isi pada kolom). Berikut kode Class AutoResizeTable.java:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package javadanphp.blogspot; import java.awt.Component; import javax.swing.JTable; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; /** * * @author Taopik Ridwan */ class AutoResizeTable { public void sesuaikanKolom(JTable t) { //cara untuk menyesuaikan kolom dari tabel adalah mengambil // lebar kolom yang ada kemudian sesuaikan TableColumnModel modelKolom = t.getColumnModel(); for (int kol = 0; kol < modelKolom.getColumnCount(); kol++) { int lebarKolomMax = 0; for (int baris = 0; baris < t.getRowCount(); 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 } }Cara Menggunakan Untuk menggunakan Class diatas sangat mudah, berikut contoh penggunaanya:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package javadanphp.blogspot; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ScrollPaneConstants; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.table.DefaultTableModel; /** * * @author Taopik Ridwan */ public class Demo { private JTable tabel; private String[] judulKolom = {"No", "Nama Blog", "Alamat Blog"}; private Object[][] isiTabel = { {new Integer(1), "Southeast Asia Tourism Spot", "http://moresoutheastasia.blogspot.com/"}, {new Integer(2), "How To Fix", "http://howto-fix-things.blogspot.com/"}, {new Integer(3), "Ikut berbagi tutorial Java dan PHP", "http://javadanphp.blogspot.com/"}, {new Integer(4), "Kilau Mutiara dari perairan Lombok", "http://kilaumutiaralombok.blogspot.com/"}, {new Integer(5), "Pusat Kerajinan Akar Wangi Terbaik, unik, variatif", "http://garutakarwangi.blogspot.com/"} }; public void runDemo() { DefaultTableModel model = new DefaultTableModel(isiTabel, judulKolom); tabel = new JTable(model); JScrollPane pane = new JScrollPane(tabel, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new AutoResizeTable().sesuaikanKolom(tabel); tabel.revalidate(); } }); JFrame app = new JFrame("Demo Menyesuaikan Lebar Kolom"); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.getContentPane().add(pane); app.setSize(600, 200); app.setLocationRelativeTo(null); app.setVisible(true); } /** * @param args the command line arguments */ public static void main(String[] args) { try { javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { } javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new Demo().runDemo(); } }); } }Ini Hasilnya:
Males Copy Paste? hehe tenang download saja file projectnya. (Dibuat menggunakan Netbeans 7.2) Download File
Boleh juga idenya,
BalasHapusNamun jika jumlah baris JTablenya puluhan ribu,
sistemnya kurang efektif karena harus mengiterasi tiap baris.
Yup untuk ukuran tabel dengan data puluhan ribu memang kurang efektif, tapi saya jarang menampilkan data sebanyak itu di JTable, karena biasanya untuk spesifikasi komputer tertentu menampilkan data sebanyak itu bisa membuat komputer kehilangan banyak sumber daya. untuk mengatasinya saya menggunakan pagnation. tapi untuk data dibawah 20 ribu masih Oke koq, saya sudah test di Laptop Asus AMD seri x43u (pake SwingWorker)
Hapuscara menggunakan nya gmn ya...
Hapussaya sudah drog ke form tp ngk ada tampil apa2...
maaf msih baru
Class diatas bukan komponen swing, cara penggunaannya: buat sebuah container (bisa Jframe atau JPanel), kemudian tambahkan jtable. nah tabel inilah yang nantinya di resize, penggunaannya ada pada kode yang kedua
Hapuscoba gunakan algoritma recursive akan jauh lebih cepat jika memang baris nya terdapat puluhan ribu baris
HapusSip, makasih sarannya
Hapusentah knapa ini masih gk ngaruh juga di coding gue gan.
BalasHapus