Thursday, December 29, 2011

JTable Dinamis Menyesuikan Dengan Panjang Record

Tags


Dynamic JTable

Assalamualakum wr. wb...
Sahabat sekalian pada kesempatan ini saya mau share cara membuat lebar JTabel (tabel pada java) otomatis menyesuaikan lebarnya sesuai dengan isi text yang ada.

1. Persiapan Kebutuhan

 Untuk tutorial kali ini kita harus menyiapkan Netbeans IDE, tetapi sebenarnya mengunakan IDE lainnya seperti Eclipe juga tidak masalah.Sebagai ilustrasi seperti ditunjukan pada gambar dibawah, kita ingin merubah tampilan Jtabel bagian yang di kasih tanda merah terdapat space yang cukup lebar.

2. Pembuatan Code

untuk memulai membuat program ini pertama buat projek baru dan beri nama TabelDinamis, stukturnya seperti ditunjukan pada gambar dibawah.
Baca Juga :
selanjutnya buatlah sebuat class baru dan berinama Mahasiswa:
package asep.tabeldinamis;

/**
 *
 * @author asep
 */
public class Mahasiswa {
   
    private String nim;
    private String nama;
    private String alamat;
   
    public String getAlamat() {
        return alamat;
    }

    public void setAlamat(String alamat) {
        this.alamat = alamat;
    }

    public String getNama() {
        return nama;
    }

    public void setNama(String nama) {
        this.nama = nama;
    }

    public String getNim() {
        return nim;
    }

    public void setNim(String nim) {
        this.nim = nim;
    }   
}
selanjutnya buat tabelModelMahasiswa:
package asep.tabeldinamis;

import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author asep
 */
public class TableModelMahasiswa extends AbstractTableModel{
  
    private List<Mahasiswa>list=new ArrayList<Mahasiswa>();

    public TableModelMahasiswa(List<Mahasiswa> list) {
        this.list=list;
    }

    public TableModelMahasiswa() {
    }
  
 
    @Override
    public int getRowCount() {
        return list.size();
    }

    @Override
    public int getColumnCount() {
        return 3;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        switch(columnIndex){
            case 0: return list.get(rowIndex).getNim();
            case 1: return list.get(rowIndex).getNama();
            case 2: return list.get(rowIndex).getAlamat();
                default:return null;
        }
    }

    @Override
    public String getColumnName(int column) {
        switch(column){
            case 0: return "Nim";
            case 1: return "Nama";
            case 2: return "Alamat";
                default:return null;
        }
    } 
}
Selanjutnya buat class sesuaikan kolom:
package asep.tabeldinamis;

import java.awt.Component;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;

/**
 *
 * @author asep
 */
public class SesuaikanKolom {

    public SesuaikanKolom(JTable table) {
        buatKolomSesuai(table);
    }
    public void buatKolomSesuai(JTable t){
        TableColumnModel columnModel=t.getColumnModel();
        for(int kol = 0;kol<columnModel.getColumnCount();kol++){
            int lebarKolomMax=0;
            for(int baris=0;baris<t.getRowCount();baris++){
                TableCellRenderer rend=t.getCellRenderer(baris, kol);
                Object nilaiTabel=t.getValueAt(baris, kol);
                Component comp=rend.getTableCellRendererComponent(t, nilaiTabel, false, false, baris, kol);
                lebarKolomMax=Math.max(comp.getPreferredSize().width, lebarKolomMax);
            }
            TableColumn kolom=columnModel.getColumn(kol);
            kolom.setPreferredWidth(lebarKolomMax);
        }
    }   
}
Slanjutnya buatlah sebuah JFrame dan masukan sebuah tabel seperti gambar berikut:
Buatlah sebuah metode tepat dibawah kode berikut:
public View() {
       initComponents();
     }
public List isiMahasiswa(){
        List list=new ArrayList();
        for(int i=0;i<20;i++){
            Mahasiswa m=new Mahasiswa();
            m.setNim("001");
            m.setNama("asep hfhfefejfoe");
            m.setAlamat("kebon jeruk gagaeierierererihfjef");
            list.add(m);
        }
        return list;
    }
Kemudian Masukan kode didalam kode ini:
public View() {
initComponents();
//letakan disini
}
public View() {
       initComponents();
       this.setLocationRelativeTo(null);
       TableModelMahasiswa modelMahasiswa=new TableModelMahasiswa(isiMahasiswa());
       TabelMahasiswa.setModel(modelMahasiswa);
       SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new SesuaikanKolom(TabelMahasiswa);
                TabelMahasiswa.revalidate();
            }
        });
    }

3. Testing dan Output

ketika code program dijalankan maka akan tampil sepetri gambar dibawah ini, kita bisa lihat pebedaannya dengan gambar diatas, space kosong yang tadi cukup lebar dan tidak merata sekarang sudah bergeser dan menyesuaikan secara otomatis.
 download kode lengkapnya disini:
tabeldinamis


EmoticonEmoticon