Mewarnai cell pada JTable
Oke langsung saja ke topik sudah lama tidak mengisi artikel lagi. Kali ini ane ingin memberikan sedikit pengalaman dalam memberikan warna pada JTable. Mewarnai pada JTable tidaklah sulit. Untuk membuatnya cukup mudah yaitu tinggal membuat Renderer yang mewarisi dari tabel TableCellRenderer. Nah untuk membuat sedikit modifikasi. Nah langsung saja ada beberapa cara yang dapat digunakan untuk memenuhi tujuan ini.Sebelumnya ane ingin memberikan sedikit gambaran bagaimana nanti hasil yang akan kita peroleh. Langsung saja lihat gambarnya..Nah misalnya kita membunyai JTable dengan nama myTable langsung saja bagaimana cara kita membuatnya..
myTable.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if (row % 2 == 1) { label.setBackground(Color.red); } else { label.setBackground(Color.BLUE); } label.setOpaque(true); label.setText((String) value); return label; } });
Nah sedikit penjelasan yang bisa ane kasih. Fungsi setDefaultRenderer ini nanti akan memberikan aksi dalam mengganti object yang ada di cell jtable ke dalam object baru yang mengextends/mewarisi java.awt.Component. Nah caranya yaitu dengan mengganti isi cell dengan tipe tertentu dalam kasus ini adalah Object yang mengisi cell. Bisa juga renderer ini digunakan untuk tipe tertentu saja misalnya Integer ataupun String. Ataupun tipe data lainnya tinggal ganti aja dari Object.class menjadi Integer.class misalnya.
Nah dari component yang ada tersebut dari kode tersebut bisa dilihat bahwa cell tersebut nantinya akan diganti dengan object yang kita inginkan disini saya memakai JLabel. Jlabel ini harus kit set sesuai dengan isi dari cellnya yaitu value yang dapat kita casting ke dalam tipe yang sesungguhnya misalnya String.
Untuk memodifikasi mana saja baris atau kolom yang dapat perlakuan manfaatkan parameter row dan column. atau bisa juga melalui cara ini
myTable = new JTable() { public TableCellRenderer getCellRenderer(int row, int column) { if ((row == 3) && (column == 2)) { return new DefaultTableCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if (row % 2 == 1) { label.setBackground(Color.red); } else { label.setBackground(Color.BLUE); } label.setOpaque(true); label.setText((String) value); return label; } }; } // else... return super.getCellRenderer(row, column); } };Nah untuk kode yang kedua ini digunakan waktu mendefinisikan dalam membuat tabel. jadi langsung diberikan tablecellrenrernya. Object yang diganti bukan cuma JLabel saja bisa juga diberi JTextField atau yang lainnya.
Selamat mencoba
Oke silahkan modifikasi bila diperlukan. jika ada pertanyaan silahkan dikomen.