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

Wednesday, December 28, 2011

Load Data Dari Database Ke JCombobox (Javax Swing)

Tags

 javax swing

Assalamualaikum Wr. Wb....
Sahabat blogger semua, kali ini saya akan share bagaimana caranya load data dari database ke combobox dengan mengunakan java. Cara ini sering sekali digunakan, dan wajib hukumnya bagi seorang programmer java menguasainya. Contoh ini dibuat sederhana saja hanya mengunakan satu tabel dan dua field yaitu id dan nama.
Ok kita langsung aja praktek, kalau kebanyakan teori malah makin pusing.
Buatlah database baru dengan nama combobox, tentunya sebelumnya kamu sudah menginstal database MySql.  Gambaran strukturnya seperti pada gambar dibawah ini, saya tidak akan bahas bagaimana cara create barunya, saya anggap kamu sudah pada bisa create database baru dan tabel baru. Jika belum bisa silahkan pelajari dulu cara-caranya:
Baca Juga :
Seetelah database baru dan tabel baru terbentuk sekarang kita isi tabel dengan data seperti dibawah, tidak usah terlalu banyak ini hanya untuk contoh saja. Jika nanti sudah berjalan dengan normal silahkan di modifikasi sendiri datanya:

Database baru, tabel baru dan datanya sudah kita isi, Selanjutnya buat sebuah projek baru dan berinama sesuka anda, gambarannya seperti image dibawah:

Selanjutnya buat paketbaru dan berinama bebas:
buat sebuat class baru dan berinama DatabaseHelper

package asep.comboboxwithdatabase.koneksi;

import java.sql.Connection;
import java.sql.DriverManager;

/**
 *
 * @author asep
 */
public class DatabaseHelper {
    private static Connection connection;

    public static Connection getConnection() {
        if(connection==null){
            try{
                Class.forName("com.mysql.jdbc.Driver");
                connection=DriverManager.getConnection("jdbc:mysql:"
                        + "//localhost:3306/combobox", "root", "root");
               
            }catch(Throwable t){
               
            }
        }
        return connection;
    }
   
   
}

selanjutnya buatlah GUI form (tampilan) seperti berikut:
da isi kode seperti berikut:
package asep.comboboxwithdatabase.koneksi;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 *
 * @author asep
 */
public class view extends javax.swing.JFrame {

    /** Creates new form view */
    public view() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        comboKategory = new javax.swing.JComboBox();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        comboKategory.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "plihan" }));
        comboKategory.addPopupMenuListener(new javax.swing.event.PopupMenuListener() {
            public void popupMenuCanceled(javax.swing.event.PopupMenuEvent evt) {
            }
            public void popupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt) {
            }
            public void popupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) {
                comboKategoryPopupMenuWillBecomeVisible(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(comboKategory, javax.swing.GroupLayout.PREFERRED_SIZE, 301, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(24, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(34, 34, 34)
                .addComponent(comboKategory, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(36, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

private void comboKategoryPopupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) {                                                       
// hapus semua data combobox
    comboKategory.removeAllItems();
    //load data dari database ke combo box
    Statement statement=null;
    ResultSet resultSet=null;
    try{
        statement=DatabaseHelper.getConnection().createStatement();
        resultSet=statement.executeQuery("select nama from kategori_barang");
        while(resultSet.next()){
            String kategory=resultSet.getString("nama");
            comboKategory.addItem(kategory);
        }
    }catch(SQLException e){
      
    }finally{
        try{
            if(resultSet != null){
                resultSet.close();
            }
        }catch(SQLException e){
           
        }
    }
    try{
        if(statement !=null){
            statement.close();
        }
    }catch(SQLException e){
       
    }
}                                                       

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(view.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(view.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(view.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(view.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new view().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JComboBox comboKategory;
    // End of variables declaration
}
untuk lebih jelasnya silahkan download sourcodnya:
comboboxwithdatabase


mudah mudahan bisa membantu kamu, terutama kamu yang baru belajar Java.
Sampai ketemu di postingan selanjutnya

Salam