Selain menampilkan predefined editor (obyek dari kelas JTextBox atau JCheckBox, baca artikel Mengenal Renderer Dan Editor Tabel Di Pemrograman Java), Anda juga dapat membuat custom editor untuk mengedit nilai sel dengan bantuan obyek dari kelas JCheckBox, JComboBox dan JTextField. Java telah menyediakan kelas DefaultCellEditor (merupakan kelas turunan dari kelas abstrak AbstractCellEditor dan mengimplementasikan interface TableCellEditor) yang digunakan untuk membuat custom editor. Tabel berikut ini adalah daftar tiga kontruktor kelas DefaultCellEditor yang mempunyai keterkaitan dengan obyek dari kelas JCheckBox, JComboBox dan JTextField.

Tabel konstruktor kelas DefaultCellEditor
Konstruktor Keterangan
DefaultCellEditor(JCheckBox checkBox) Mengkonstruksi obyek DefaultCellEditor yang menggunakan obyek check box.
DefaultCellEditor(JComboBox comboBox) Mengkonstruksi obyek DefaultCellEditor yang menggunakan obyek combo box.
DefaultCellEditor(JTextField textField) Mengkonstruksi obyek DefaultCellEditor yang menggunakan obyek text field.

Untuk menggunakan custom editor, Anda hanya perlu membuat obyek dari salah satu ketiga kelas tersebut dan kemudian menggunakannya sebagai argumen parameter konstruktor dari kelas DefaultCellEditor. Custom editor akan ditampilkan di sel kolom tabel dengan terlebih dahulu memastikan kolom individu mana yang memakainya dan kemudian menggunakan metoda setCellEditor dengan argumen obyek dari kelas DefaultCellEditor.

Contoh program berikut ini mendemonstrasikan penggunaan kelas JComboBox sebagai editor untuk kolom Tipe di tabel penjualan notebook. Masing- masing tipe notebook tersebut sebenarnya mempunyai lima warna yaitu merah, hitam, coklat, abu-abu dan putih. Obyek combo box akan ditampilkan ketika sel di kolom Tipe diklik. Anda dapat menggunakan combo box tersebut untuk merubah ke tipe notebook lain yang tersedia. Berikut ini adalah kode program dan hasil eksekusinya:

// Nama file : TabelPenjualanNotebook6.java
// Membuat editor dari kelas JComboBox

// Mengimpor kelas
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

// Deklarasi kelas
public class TabelPenjualanNotebook6 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 TabelPenjualanNotebook6() {

     // Mengatur tinggi baris tabel
     tabel.setRowHeight(26);

     // Mendekorasi table header
     JTableHeader header = tabel.getTableHeader();
     header.setReorderingAllowed(false);
     header.setFont(font);

     // Membuat combo box untuk kolom tipe
     JComboBox comboBoxTipe = new JComboBox();
     comboBoxTipe.addItem("Satellite L630-1031U");
     comboBoxTipe.addItem("Satellite L645-1043XB");
     comboBoxTipe.addItem("Satellite L645-1078X");
     comboBoxTipe.addItem("Satellite L645-1042XR");

     // Mengatur combo box sebagai editor kolom tipe
     TableColumn kolomTipe = tabel.getColumn("Tipe");
     kolomTipe.setCellEditor(new DefaultCellEditor(comboBoxTipe));

     getContentPane().add(new JScrollPane(tabel), BorderLayout.CENTER);
  }

  // Metoda main
  public static void main(String[] args) {
     TabelPenjualanNotebook6 frame = new TabelPenjualanNotebook6();
     frame.setTitle("Kelas TabelPenjualanNotebook6");
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.setSize(400, 150);
     frame.setVisible(true);
  }
}

Baris nomor 46 adalah pernyataan untuk mengkonstruksi obyek combo box dan memberi variabel comboBoxTipe acuan ke obyek tersebut. Baris nomor 47 – 50 merupakan pernyataan untuk menambahkan beberapa item ke obyek combo box. Pernyataan baris nomor 53 – 54 digunakan untuk mengatur obyek combo box yang telah dikonstruksi sebagai editor untuk kolom Tipe.

Menggunakan custom editor tabel di Java

Baca artikel terkait lainnya: