Kalo temen-temen anggota Jug-Bandung, pasti sudah tau ini, soalnya kemaren dah di bahas di milis Jug-Bandung, kalo blon tau silahkan kunjungi disini :
http://groups.google.co.id/group/jug-bandung/t/a6a2717fca2a32ed
Sekalian juga yang belum join, silahkan join π
Ceritanya gini, biasanya kalo kita bikin table, maka kita juga bikin tablemodel, misal tabel mahasiswa, maka kita bikin tablemodel mahasiswa, trus kalo tabel anggota, maka bikin tablemodel anggota juga, dan seterusnya π Bayangkan jika di aplikasi kita ada 50 table, berarti kita biki 50 tablemodel juga π¦ capedeh…
Nah gimana caranya kita bikin 1 tablemodel, dan bisa digunakan oleh semuany?
Gampang aja π , ini tutorialnya….
Pertama bikin dulu @annotation, ini dibuat untuk mendeklarasikan kolom di table :
package khannedy.dynamictable; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Column { String name() default ""; }
Annotation @Column ini tar disisipkan di field yang akan dijadikan kolom:D Setelah itu tinggal kita bikin TableModel nya, kira-kira seperti ini :
package khannedy.dynamictable; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import javax.swing.table.AbstractTableModel; public class DynamicTableModel<T> extends AbstractTableModel { private List<T> list; private List<Field> fields = new ArrayList<Field>(); private List<Column> columns = new ArrayList<Column>(); public DynamicTableModel(List<T> list, Class<T> class1) { this.list = list; for (Field field : class1.getDeclaredFields()) { Column column = field.getAnnotation(Column.class); if (column != null) { fields.add(field); columns.add(column); } } } public int getRowCount() { return list.size(); } public int getColumnCount() { return fields.size(); } @Override public String getColumnName(int column) { return columns.get(column).name(); } public Object getValueAt(int rowIndex, int columnIndex) { try { Field field = fields.get(columnIndex); field.setAccessible(true); return field.get(list.get(rowIndex)); } catch (IllegalArgumentException ex) { return null; } catch (IllegalAccessException ex) { return null; } } }
Setelai deh π Lho kok? emang udah π Sekarang tinggal Contoh…
Misal kita mau bikin tabel untuk mahasiswa, dan pertama kita bikin kelas mahasiswa, nah tar di field yang akan dijadikan colum tinggal kita tambah @Column :
package khannedy.dynamictable; public class Mahasiswa { @Column(name = "Nim") private String nim; @Column(name = "Nama Depan") private String namaDepan; @Column(name = "Nama Belakang") private String namaBelakang; public String getNamaBelakang() { return namaBelakang; } public void setNamaBelakang(String namaBelakang) { this.namaBelakang = namaBelakang; } public String getNamaDepan() { return namaDepan; } public void setNamaDepan(String namaDepan) { this.namaDepan = namaDepan; } public String getNim() { return nim; } public void setNim(String nim) { this.nim = nim; } }
Sekarang tinggal contoh programnya π ini contohnya :
package khannedy.dynamictable; import java.awt.BorderLayout; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.SwingUtilities; public class Main implements Runnable { public static void main(String[] args) { SwingUtilities.invokeLater(new Main()); } public void run() { JFrame frame = new JFrame("Eko Ganteng"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(new BorderLayout()); List<Mahasiswa> mahasiswas = new ArrayList<Mahasiswa>(); for (int i = 0; i < 100; i++) { Mahasiswa mahasiswa = new Mahasiswa(); mahasiswa.setNim("10106031"); mahasiswa.setNamaDepan("Eko Kurniawan"); mahasiswa.setNamaBelakang("Khannedy"); mahasiswas.add(mahasiswa); } DynamicTableModel<Mahasiswa> tableModel = new DynamicTableModel<Mahasiswa>(mahasiswas, Mahasiswa.class); JTable table = new JTable(tableModel); JScrollPane scrollPane = new JScrollPane(table); frame.getContentPane().add(scrollPane, BorderLayout.CENTER); frame.setSize(500, 500); frame.setVisible(true); } }
Screenshot nya? cobain aja sendiri, saya lagi males upload gambarnya π
Mas Eko wih ngak kepikiran aku tentang itu π ide bagus mas
hehe π
nah w pernah tu bro buat aplikasi dgn 20 table, gila puyeng bgd w harus buat satu persatu table model nya,
nah kepikirin w, w mw buat 1 table model dmn bisa di gunakan diseluruh table..
tp yg w bingung kan setiap table field na berbeda..
berrti di setiap class yg mendeklarasikan dari field dikch @column dan sesuai kan didatabase mysql na gitu ya,..
enggak sesuai dengan di database π tapi yang pengen ditampilkan di table, maka pake @Column π
gw uda coba pk tabel model cuma 1 bisa buat banyak tabel hahahah, cuma bikin string nama colomnya doang
hoahohaohahoahoahoahoahoaaa ..
Ctrl+S ahh ,, hehe
nama class seperti List maksudnya apa yah
kok aku baru tau yah ada sintak kaya gitu
wew list itu struktur data π
yang , maksdunya apa mas?
maksud apa?
“”
wagh ternyata langsung digenerate ma wordpress mas ..
maksudnya List(T), List(Field), kok ada parameter gitu??
itu namanya Java Generic
ok thanx mas gw searching turorial java generic di mbah google .. mudah mudahan ada yang bisa gw mengerti.. π
Ping balik: Menggunakan iTextPDF « Launk's Informatika
good … good
q dah nyobain…!!!
salam kenal mas eko… saya newbie d java. thanks dah sharing ilmunya.
sy lg migrasi aplikasi bikinan sendiri k java. ada 50-an tabel. tutor dynamictable ini bisa sangat berarti untuk saya..
kang kalau Jtable nya sebagai media input data seperti di form penjualan gimana caranya?
punten ya kak jika pertanyaan saya terlalu mudah,,tapi saya benar2 ga tau
“Pertama bikin dulu @annotation, ini dibuat untuk mendeklarasikan kolom di table :
package khannedy.dynamictable;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Column {
String name() default “”;
}”
ka, annotation ini dibuat dalam satu kelas tersendiri tau bisa code tersebut dimasukkan pada kelas DynamicTableModel extends AbstractTableModel
mohon pencerahannya ya ka,,sy ucapakan terima kasih jika k2 bersedia memberikan jawabannya nya
dalam kelas tersendiri
Aslm, tutorial yg bgus mas, jadi inti dari tutoral ni. Seandainya q bkn aplkasi database dmn tabelnya ada 20 msalnya, tapi di aplikasi yg q bkn hnya menampilkan join 2 buah tabel. Jad q g ush repot2 mendeklaraskan semua tabel, ckup mendeklarasikan 1 buah tabelmodel yang bersi join tabel tersebut atau gmn mas, mhn bntuannya.mksh
assalamualaikum. terimakasih untuk mas eko. karena sangat membantu sekali unuk saya xp, tapi saya punya pertanyaan sedikit. kalo dari tutorial ini bisa ga ya di kasih checkbox di tablenya???.