Kelas DefaultTableCellRenderer adalah komponen turunan kelas JLabel dan mengimplementasikan interface TableCellRenderer yang menetapkan metoda getTableCellRendererComponent yang bertindak sebagai renderer. Kelas baru tersebut harus mendeklarasikan ulang metoda getTableCellRendererComponent yang mengembalikan (return) komponen untuk mengisi sel individu di kolom tabel tertentu. Berikut ini adalah sintaksis metoda getTableCellRendererComponent():
public Component getTableCellRendererComponen(JTable table, Object value, boolean isSelected, boolean isFocused, int row, int column)
Contoh program berikut ini terdiri dari kelas ButtonLabelCellRenderer dan kelas TabelPenjualanNotebook7. Kelas ButtonLabelCellRenderer adalah turunan dari kelas DefaultTableCellRenderer yang mendeklarasikan metoda getTableCellRendererComponen. Komponen yang dikembalikan metoda ini adalah kombinasi antara obyek kelas JButton dan JLabel yang diletakkan di obyek JPanel. Kelas TabelPenjualanNotebook7 adalah main class yang menggunakan kelas ButtonLabelCellRenderer. Berikut ini adalah kode program kedua kelas tersebut dan hasil eksekusinya:
Kode Program Kelas ButtonLabelCellRenderer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | // Nama file : ButtonLabelCellRenderer.java // Mengkombinasikan button dan label sebagai table cell renderer // Mengimpor kelas import java.awt.*; import javax.swing.*; import javax.swing.table.*; // Deklarasi kelas public class ButtonLabelCellRenderer extends DefaultTableCellRenderer { private JPanel panel = new JPanel(); private JButton button = new JButton(); private JLabel label = new JLabel("", JLabel.LEFT); public ButtonLabelCellRenderer() { panel.setLayout(new BorderLayout(8, 3)); label.setPreferredSize(new Dimension(50, 15)); panel.add(button, BorderLayout.CENTER); panel.add(label, BorderLayout.LINE_END); } // Mengimplementasikan metoda getTableCellRendererComponent public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean isFocused, int row, int column) { Color warna; String strWarna = (String)value; if (strWarna == "Black") warna = new Color(0, 0, 0); else if (strWarna == "Brown") warna = new Color(139, 69, 19); else if (strWarna == "Gray") warna = new Color(211, 211, 211); else // RGB untuk warna merah warna = new Color(255, 0, 0); button.setBackground(warna); label.setText(strWarna); return panel; } } |
Kode Program Kelas TabelPenjualanNotebook7.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | // Nama file : TabelPenjualanNotebook7.java // Mendemonstrasikan table cell renderer // Mengimpor kelas import java.awt.*; import javax.swing.*; import javax.swing.table.*; // Deklarasi kelas public class TabelPenjualanNotebook7 extends JFrame { // Membuat nama kolom tabel String[] kolomTabel = {"Tipe", "Warna", "Sistem Operasi", "Jumlah Terjual"}; // Membuat data tabel Object[][] dataTabel = { {"Satellite L630-1031U", "Black", new Boolean(false), new Integer(3)}, {"Satellite L645-1043XB", "Brown", new Boolean(true), new Integer(7)}, {"Satellite L645-1078X", "Gray", new Boolean(false), new Integer(5)}, {"Satellite L645-1042XR", "Red", new Boolean(true), new Integer(4)}, }; // Membuat model tabel private ModelTabelPenjualanNotebook model = new ModelTabelPenjualanNotebook(dataTabel, kolomTabel); // Membuat tabel private JTable tabel = new JTable(model); // Membuat obyek font private Font font = new Font("Tahoma", Font.BOLD, 12); // Konstruktor tanpa argumen public TabelPenjualanNotebook7() { // Mengatur tinggi baris tabel tabel.setRowHeight(26); // Mendekorasi table header JTableHeader header = tabel.getTableHeader(); header.setReorderingAllowed(false); header.setFont(font); // Mengatur cell renderer untuk kolom warna TableColumn kolomWarna = tabel.getColumn("Warna"); kolomWarna.setCellRenderer(new ButtonLabelCellRenderer()); getContentPane().add(new JScrollPane(tabel), BorderLayout.CENTER); } // Metoda main public static void main(String[] args) { TabelPenjualanNotebook7 frame = new TabelPenjualanNotebook7(); frame.setTitle("Kelas TabelPenjualanNotebook7"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(450, 150); frame.setVisible(true); } } |
Baris nomor 25 dari kode program kedua adalah pernyataan membuat table model yang masih menggunakan kelas ModelTabelPenjualanNotebook yang didefinisikan di artikel Mengenal Renderer Dan Editor Tabel Di Pemrograman Java. Untuk menampilkan kombinasi komponen yang terdiri dari warna dan string sebagai renderer untuk kolom Warna, digunakan kelas ButtonLabelCellRenderer seperti pada pernyataan baris nomor 46 dan 47.
Kelas ModelTabelPenjualanNotebook dan ButtonLabelCellRenderer terletak di direktori yang sama dengan kelas TabelPenjualanNotebook7 sehingga tidak perlu mengimpor kedua kelas tersebut.