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); } } |
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.
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.