Mempercantik tampilan JTable pada Aplikasi Java | Tempat Belajar dan Berbagi Pengetahuan Java dan PHP
Home » , , , , , , » Mempercantik tampilan JTable pada Aplikasi Java

Mempercantik tampilan JTable pada Aplikasi Java

Dipostingkan Oleh Ridwan Labs pada Sabtu, 02 Februari 2013 - Diupdate Pada: 2/02/2013

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:

Mempercantik tampilan JTable pada Aplikasi Java

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:

Mempercantik tampilan JTable pada Aplikasi Java


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:

Mempercantik tampilan JTable pada Aplikasi Java
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.
Share this article :

0 komentar:

Posting Komentar

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