Program Java menggunakan metoda kelas konkrit DefaultTableModel
Program Java Menggunakan Metoda Kelas Konkrit DefaultTableModel
Program Java berikut ini mendemontrasikan penggunaan beberapa metoda kelas konkrit DefaultTableModel. Beberapa metoda yang digunakan dari kelas tersebut adalah addRow, insertRow dan removeRow. Sebagai pengganti dari metoda showGrid dari kelas JTable untuk menampilkan garis vertikal dan horisontal tabel, Anda dapat menggunakan dua metoda lain dari kelas JTable yaitu setShowVerticalLines dan setShowHorizontalLines. Berikut ini adalah kode program dan hasil eksekusinya:

  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
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
// Nama file : TabelPenjualanNotebook2.java
// Mendemontrasikan penggunaan beberapa metoda kelas DefaultTableModel

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

// Deklarasi kelas
public class TabelPenjualanNotebook2 extends JFrame {

   // Membuat nama kolom tabel
   private String[] kolomTabel =
   {"Tipe", "Warna", "Sistem Operasi", "Jumlah Terjual"};

   // Membuat data tabel
   private 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(true), new Integer(5)},
      {"Satellite C640-1010U", "Black", new Boolean(false), new Integer(4)},
      {"Satellite A665-10033D", "Black", new Boolean(true), new Integer(2)},
      {"Qosmio X500-D832", "Black", new Boolean(true), new Integer(4)},
      {"Portege T210-1014UR", "Red", new Boolean(true), new Integer(6)},
      {"Libretto W100-1002U", "Black", new Boolean(true), new Integer(1)}
   };

   // Membuat table model
   private DefaultTableModel tModel = new DefaultTableModel(dataTabel,
      kolomTabel);

   // Membuat tabel
   private JTable tabel = new JTable(tModel);

   // Membuat obyek check box
   private JCheckBox grsVertikal = new JCheckBox(
      "Tampilkan garis vertikal", true);
   private JCheckBox grsHorisontal = new JCheckBox(
      "Tampilkan garis Horisontal", true);

   // Membuat obyek button (tombol)
   private JButton tambahBaris = new JButton("Tambah baris");
   private JButton hapusBaris = new JButton("Hapus baris dipilih");
   private JButton tambahKolom = new JButton("Tambah kolom");

   // Membuat obyek combo box model
   private DefaultComboBoxModel cboModel = new DefaultComboBoxModel();

   // Membuat obyek combo box
   private JComboBox cboWarna = new JComboBox(cboModel);

   // Membuat list cell renderer
   private ButtonLabelRenderer renderer = new ButtonLabelRenderer();

   // Konstruktor tanpa argumen
   public TabelPenjualanNotebook2() {

      cboModel.addElement(new Object[] {Color.BLACK, "Black Color"});
      cboModel.addElement(new Object[] {Color.RED, "Red Color"});
      cboModel.addElement(new Object[] {Color.MAGENTA, "Magenta Color"});
      cboModel.addElement(new Object[] {Color.BLUE, "Blue Color"});
      cboModel.addElement(new Object[] {Color.ORANGE, "Orange Color"});

      cboWarna.setRenderer(renderer);
      cboWarna.setMaximumRowCount(3);

      // Menginisialisi tabel
      tabel.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
      tabel.setGridColor(Color.BLACK);
      tabel.setSelectionBackground(Color.YELLOW);
      tabel.setSelectionForeground(Color.RED);
      tabel.setRowSelectionAllowed(true);
      tabel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

      // Mengelompokkan obyek label dan combo box
      JPanel panel1 = new JPanel();
      panel1.setLayout(new BorderLayout(4, 0));
      panel1.add(new JLabel("Warna garis"), BorderLayout.LINE_START);
      panel1.add(cboWarna, BorderLayout.CENTER);

      // Mengelompokkan obyek check box
      JPanel panel2 = new JPanel();
      panel2.setLayout(new FlowLayout());
      panel2.add(grsVertikal);
      panel2.add(grsHorisontal);

      // Mengelompokkan obyek panel1 dan panel2
      JPanel panel3 = new JPanel();
      panel3.setLayout(new GridLayout(2, 1, 0, 0));
      panel3.add(panel1);
      panel3.add(panel2);

      // Mengelompokkan obyek tombol
      JPanel panel4 = new JPanel();
      panel4.setLayout(new GridLayout(1, 3));
      panel4.add(tambahBaris);
      panel4.add(hapusBaris);
      panel4.add(tambahKolom);

      getContentPane().add(panel3, BorderLayout.PAGE_START);
      getContentPane().add(new JScrollPane(tabel), BorderLayout.CENTER);
      getContentPane().add(panel4, BorderLayout.PAGE_END);

      // Penanganan event check box
      grsVertikal.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent ae) {
            tabel.setShowVerticalLines(grsVertikal.isSelected());
         }
      });

      grsHorisontal.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent ae) {
            tabel.setShowHorizontalLines(grsHorisontal.isSelected());
         }
      });

      // Penanganan event combo box
      cboWarna.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent ae) {
            Object[] duaObjek = (Object[])(cboWarna.getSelectedItem());
            tabel.setGridColor((Color)duaObjek[0]);
         }
      });

      // Penanganan event button
      tambahBaris.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent ae) {
   
            // Memastikan ada salah satu baris dipilih
            if (tabel.getSelectedRow() >= 0)
               tModel.insertRow(tabel.getSelectedRow(), new java.util.Vector());
            else
               // Bila tidak ada baris yang dipilih
               tModel.addRow(new java.util.Vector());
         }
      });

      hapusBaris.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent ae) {
            if (tabel.getSelectedRow() >= 0)
               tModel.removeRow(tabel.getSelectedRow());
            else
               JOptionPane.showMessageDialog(null,
                  "Pilih baris yang akan dihapus!", "Menghapus Baris",
                  JOptionPane.INFORMATION_MESSAGE);
         }
      });

      tambahKolom.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent ae) {
            String namaKolom = JOptionPane.showInputDialog("Nama kolom");
            tModel.addColumn(namaKolom, new java.util.Vector());
         }
      });
   }

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

Menambah, menyisipkan dan menghapus data tabel

Contoh program ini menggunakan table model kelas konkrit DefaultTableModel. Dengan membuat obyek tabel melalui konstruktor kelas konkrit DefaultTableModel (baris nomor 31), Anda dapat menggunakan metoda kelas tersebut untuk menambah, menyisipkan atau menghapus baris tabel dimana fasilitas ini tidak terdapat di kelas JTable.

Untuk menampilkan grid tabel, program menggunakan dua metoda kelas JTable yaitu setShowHorizontalLines (baris nomor 113 – 117) dan setShowVerticalLines (baris nomor 107 – 111). Baris nomor 128 – 138 adalah pernyataan yang dieksekusi ketika tombol berlabel “Tambah baris” diklik. Tombol ini digunakan untuk menambah sebuah baris tabel di posisi paling akhir atau menyisipkan sebuah baris di antara baris tabel lain. Ketika tombol penambah baris diklik, baris nomor 132 dievaluasi untuk memastikan apakah salah satu baris tabel telah disorot.

Ekspresi tabel.getSelectedRow() mengembalikan nilai int yang mewakili indek baris tabel yang disorot (indek baris tabel dimulai dari 0). Apabila nilai yang dikembalikan oleh ekspresi lebih besar atau sama dengan 0 yang menandakan salah satu baris tabel disorot, maka baris nomor 133 dieksekusi. Pernyataan tersebut menyisipkan baris baru di atas baris yang disorot. Apabila nilai yang dikembalikan ekspresi lebih kecil dari 0, maka baris nomor 136 dieksekusi yaitu menambahkan baris baru di posisi paling bawah.

Untuk menyisipkan baris baru di antara baris tabel lain, digunakan metoda insertRow, sedangkan untuk menambahkan baris baru di posisi paling bawah, digunakan metoda addRow. Kedua metoda berada di kelas DefaultTableModel (di contoh program adalah variabel acuan tModel). Apabila diperhatikan, kedua metoda mempunyai parameter tipe kelas Vector yang berada di paket java.util. Kelas DefaultTableModel mengakomodasi data tabel di suatu tempat penyimpanan yang merupakan obyek kelas Vector. Elemen yang tersimpan di obyek vektor merupakan larik obyek dimana masing-masing obyek mewakili nilai sel tabel.

Di contoh program, sebuah baris tabel juga dapat dihapus dengan mengklik tombol berlabel “Hapus baris dipilih”. Saat tombol diklik, baris nomor 140 – 149 dieksekusi. Program akan mengevaluasi terlebih dahulu baris nomor 142 untuk menentukan apakan salah satu baris tabel disorot. Apabila hasil evaluasi bernilai boolean true (nilai ekspresi tabel.getSelectedRow() lebih besar atau sama dengan 0), maka baris nomor 143 dieksekusi yaitu menghapus baris yang dipilih menggunakan metoda removeRow.

Metode removeRow mempunyai sebuah parameter tipe int yang menunjukkan indek baris tabel yang dihapus. Apabila hasil evaluasi bernilai boolean false (nilai ekspresi tabel.getSelectedRow() lebih kecil dari 0), maka baris nomor 145 dieksekusi yaitu menampilkan kotak dialog pesan yang menginstruksikan pengguna aplikasi untuk menyorot salah satu baris yang akan dihapus.

Menambah, menyisipkan dan menghapus data tabel

Untuk menambah kolom baru di posisi paling akhir (paling kanan) dari tabel, Anda dapat menggunakan tombol berlabel “Tambah kolom”. Ketika tombol diklik, baris nomor 151 – 156 dieksekusi. Saat program mengeksekusi baris tersebut, kotak dialog input ditampilkan. Anda dapat memasukkan string di kotak dialog sebagai input untuk label kolom baru.

Apabila kotak dialog input dibiarkan kosong dan kemudian langsung menekan tombol berlabel “OK”, maka kolom baru akan tetap ditambahkan di tabel tanpa label kolom. Penambahan kolom baru di tabel menggunakan metoda addColumn dengan argumen parameter pertama adalah tipe String dan argumen parameter kedua adalah tipe Vector.

Menambah, menyisipkan dan menghapus data tabel