Membuat class Auto Resize (Penyesuaian ukuran) untuk menyesuaikan kolom pada JTable | Tempat Belajar dan Berbagi Pengetahuan Java dan PHP
Home » , , , » Membuat class Auto Resize (Penyesuaian ukuran) untuk menyesuaikan kolom pada JTable

Membuat class Auto Resize (Penyesuaian ukuran) untuk menyesuaikan kolom pada JTable

Dipostingkan Oleh Ridwan Labs pada Senin, 28 Januari 2013 - Diupdate Pada: 1/28/2013

Postingan ini sebenarnya sudah pernah di posting di blog lama, postingan ini membahas bagaimana cara mengatur lebar kolom pada JTable secara otomatis.
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).

Membuat class Auto Resize (Penyesuaian ukuran) untuk menyesuaikan kolom pada JTable

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:

Membuat class Auto Resize (Penyesuaian ukuran) untuk menyesuaikan kolom pada JTable


Males Copy Paste? hehe tenang download saja file projectnya. (Dibuat menggunakan Netbeans 7.2) Download File
Share this article :

7 komentar:

  1. Boleh juga idenya,
    Namun jika jumlah baris JTablenya puluhan ribu,
    sistemnya kurang efektif karena harus mengiterasi tiap baris.

    BalasHapus
    Balasan
    1. 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)

      Hapus
    2. cara menggunakan nya gmn ya...
      saya sudah drog ke form tp ngk ada tampil apa2...

      maaf msih baru

      Hapus
    3. 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

      Hapus
    4. coba gunakan algoritma recursive akan jauh lebih cepat jika memang baris nya terdapat puluhan ribu baris

      Hapus
  2. entah knapa ini masih gk ngaruh juga di coding gue gan.

    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