Banner Java

Menggunakan Custom Renderer Pada Tabel Di Pemrograman Java

Selain predefined renderer yang secara otomatis ditempatkan dan dimuat disesuaikan dengan kelas Java yang mengisi sel-sel kolom tabel, Anda juga dapat menempatkan image atau komponen Java lain di dalam sel tabel (custom renderer). Untuk membuat custom renderer, dapat dilakukan dengan membuat kelas baru yang merupakan turunan atau perluasan dari kelas DefaultTableCellRenderer.

Kelas DefaultTableCellRenderer adalah komponen standar yang merupakan turunan kelas JLabel dan mengimplementasikan interfes TableCellRenderer yang menetapkan metoda getTableCellRendererComponent yang diperlukan oleh obyek yang bertindak sebagai renderer. Kelas baru tersebut harus mendeklarasikan ulang metoda getTableCellRendererComponent yang mengembalikan (return) komponen untuk mengisi sel-sel individu di kolom tabel tertentu. Berikut ini adalah sintak penulisan metoda getTableCellRendererComponent():

   public Component getTableCellRendererComponen(JTable table, Object value,
      boolean isSelected, boolean isFocused, int row, int column)

Contoh program berikut ini terdiri dari dua kelas. Kelas pertama adalah ButtonLabelCellRenderer dan kelas kedua adalah TabelPenjualanNotebook7. Kelas pertama merupakan turunan dari kelas DefaultTableCellRenderer dan mendeklarasikan ulang metoda getTableCellRendererComponen. Komponen yang dikembalikan oleh metoda ini adalah kombinasi antara obyek kelas JButton dan JLabel yang diletakkan di obyek JPanel. Kelas TabelPenjualanNotebook7 merupakan kelas utama (main class) yang menggunakan kelas ButtonLabelCellRenderer. Berikut ini adalah kode program kedua kelas tersebut dan hasil eksekusinya:

Kode Program Kelas ButtonLabelCellRenderer.

// 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.

// 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 adalah pernyataan untuk membuat table model yang masih menggunakan kelas ModelTabelPenjualanNotebook yang didefinisikan di artikel Mengenal Renderer Dan Editor Tabel Di Pemrograman Java. Sedangkan untuk menampilkan kombinasi komponen yang terdiri dari warna dan string sebagai renderer untuk kolom Warna, Anda digunakan kelas ButtonLabelCellRenderer sebagaimana pernyataan di baris nomor 46 dan 47. Kelas ModelTabelPenjualanNotebook dan ButtonLabelCellRenderer terletak di direktori yang sama dengan kelas utama (kelas TabelPenjualanNotebook7) sehingga Anda tidak perlu mengimpor kedua kelas tersebut.

Menggunakan custom renderer Tabel di Java

Baca artikel terkait lainnya:

Untuk memperbaiki mutu konten, Anda dapat berpartisipasi dengan cara melaporkan apabila menemukan kesalahan ketik, kata-kata rangkap, redaksi kurang pas (jelas), gambar pendukung tidak ada dan sebagainya melalui form Kontak Kami untuk mendapatkan perbaikan. Terima kasih atas kerjasamanya.

Hindro HindriantoHindro adalah pendiri sekaligus admin termasmedia.com dan topikit.com, blog online yang mengulas teknologi informasi. Dunia web mulai ditekuni tahun 2012 dengan mempelajari CMS Joomla dan Wordpress. Beberapa buku yang sekarang dipelajari antara lain PHP, HTML5, ASP.NET 4.5, JavaScript, CSS3, MySQL, Adobe Dreamweaver, Adobe Photoshop dan Adobe Flash.