Sebagai programmer java, penggunaan JTable adalah satu hal yang tidak bisa dihindarkan. JTable merupakan komponen grid yang terdiri dari baris dan kolom. JTable merupakan komponen yang dapat digunakan untuk menampilkan data seperti pada spreadsheet (Excel, Libre Office, dll).
Satu hal yang menurut saja cukup mengganggu adalah tampilan dari JTable itu sendiri. jika data tabel cukup banyak, ketidak nyamanan itu tidak terlihat, namu jika jumlah data dalam JTablenya sedikit, ada satuhal yang menggangu tampilan. Hal ini adalah JTable akan terlihat menggantung pada panel tempat tabel disimpan. berikut contohnya:
Biasanya sih kita "agak" gak peduli pada tampilan JTable yang seperti ini, namun yang perlu di perhatikan, tampilan merupakan salah satu pertimbangan bagi user/pengguna aplikasi untuk membeli aplikasi yang kita buat. sebenarnya kita bisa merubah tampilan JTable diatas supaya terlihat lebih menarik. berikut contohnya:
Terlihat bedanya kan? space yang sebelumnya kosong terisi dengan tabel sehingga terlihat lebih rapi. untuk membuatnya, kita bisa membuatnya dengan cara membuat UI tersendiri untuk tabel yang kita inginkan. berikut kode yang bisa agan-agan gunakan supaya JTable yang agan buat bisa lebih menarik.
package javadanphp.customtable; import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.JComponent; import javax.swing.JScrollPane; import javax.swing.JViewport; import javax.swing.ViewportLayout; import javax.swing.plaf.basic.BasicTableUI; /** * * @author Taopik Ridwan */ public class CustomTableUI extends BasicTableUI { private static final Color EVEN_ROW_COLOR = new Color(241, 245, 250); private PropertyChangeListener fAncestorPropertyChangeListener = createAncestorPropertyChangeListener(); @Override public void installUI(JComponent c) { super.installUI(c); table.setShowVerticalLines(true); table.setShowHorizontalLines(false); table.setShowGrid(false); table.setIntercellSpacing(new Dimension(0, 0)); table.addPropertyChangeListener("ancestor", fAncestorPropertyChangeListener); } private PropertyChangeListener createAncestorPropertyChangeListener() { return new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { // indicate that the parent of the JTable has changed. parentDidChange(); } }; } private void parentDidChange() { if (table.getParent() instanceof JViewport && table.getParent().getParent() instanceof JScrollPane) { JScrollPane scrollPane = (JScrollPane) table.getParent().getParent(); scrollPane.getViewport().setLayout(new BugFixedViewportLayout()); } } @Override public void paint(Graphics g, JComponent c) { int rowAtPoint = table.rowAtPoint(g.getClipBounds().getLocation()); int topY = rowAtPoint < 0 ? g.getClipBounds().y : table.getCellRect(rowAtPoint, 0, true).y; int currentRow = rowAtPoint < 0 ? 0 : rowAtPoint; while (topY < g.getClipBounds().y + g.getClipBounds().height) { int bottomY = topY + table.getRowHeight(); g.setColor(getRowColor(currentRow)); g.fillRect(g.getClipBounds().x, topY, g.getClipBounds().width, bottomY); topY = bottomY; currentRow++; } super.paint(g, c); } private Color getRowColor(int row) { return row % 2 == 0 ? EVEN_ROW_COLOR : table.getBackground(); } // Memodifikasi Viewport untuk JTable private class BugFixedViewportLayout extends ViewportLayout { @Override public void layoutContainer(Container parent) { JViewport vp = (JViewport) parent; Component view = vp.getView(); if (view == null) { return; } Point viewPosition = vp.getViewPosition(); Dimension viewPrefSize = view.getPreferredSize(); Dimension vpSize = vp.getSize(); Dimension viewSize = new Dimension(viewPrefSize); if ((viewPosition.x == 0) && (vpSize.width > viewPrefSize.width)) { viewSize.width = vpSize.width; } if ((viewPosition.y == 0) && (vpSize.height > viewPrefSize.height)) { viewSize.height = vpSize.height; } if (!viewSize.equals(viewPrefSize)) { vp.setViewSize(viewSize); } } } }Nah silahkan pelajari dan coba run (Kode Sumbernya bisa di Download di akhir artikel). Bagaimana menggunakan Class ini? jawabannya sangat gampang, agan tinggal menambahkan ui tersebut kedalam Jtable dengan method setUI(). berikut contoh implementasinya:
Penggunaan Class TableCustom.java pada JTable |
Silahkan Download Kode sumber untuk artikel ini:
Download file contoh Mempercantik tampilan JTable pada Aplikasi Java (Dibuat menggunakan Netbeans 7.2)
Terima kasih sudah meluangkan waktu untuk mengunjungi blog ini.
0 komentar:
Posting Komentar