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.

saya mau tanya bang...
BalasHapuskalo kita mau ngasih warna pada cell yang kita kehendaki gimana ?
misal saya ingin memberikan warna biru hanya pada cell (2,3) yaitu baris 2 dan kolom 3...itu bagaimana?
soalnya saya mau membuat gantt chart dari JTable...
trima kasih bang...
mohon pencerahannya...
Kode yang ini tinggal dimodifikasi sedikit :
BalasHapusmyTable.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 && column==3)
label.setBackground(Color.BLUE)
label.setOpaque(true);
label.setText((String) value);
return label;
}
});
trima kasih banyak mas...
BalasHapussetelah akhirnya mempelajari kodenya, saya berhasil...
sekali lagi terima kasih...
mas klo isi tabelnya berasal dari Retrive tabel database, dan ada kondisi jika status = 1 (LUNAS) dan status = 2 (BELUM BAYAR)
BalasHapuscoba baca ini ya..
BalasHapushttp://stackoverflow.com/questions/14425364/swing-setting-the-color-of-a-cell-based-on-the-value-of-a-cell
oke lancar dan running...
BalasHapusmaaf nih mas saya mau tanya lg klo isi tabelnya d ambil dr database gmana ya...?? karena yg saya praktekin ini menggunakan array data statis...
String data[][] = {{"01","Herman","programmer","1"},{"02","Arif","Multi Media","0"},{"03","Susan","Akuntansi","0"},{"04","Ali","Bahasa Indonesia","1"}};
String col[] = {"No","Nama","Jurusan","Status"};
maklum nih newbie bgt ttg java, ada referensikah untuk ambil datanya dari database dan menggunakan fungsi yg mas berikan...??
Terima Kasih
baca ini ya.. http://stackoverflow.com/questions/11983554/reading-data-from-database-and-storing-in-array-list-object
Hapushadeuuhh... belum ngerti saya mas, ada contoh source codenya gak mas?? dengan menggunakan JTable yang isi datanya dari database...
HapusTerima Kasih
maksud saya contoh source code JTable yang isi datanya dari database dan menggunakan fungsi warna seperti di atas.
HapusTerima Kasih
wah gak ada nih kalau contoh... tinggal ganti data sourcenya doang.. pelajari aja database di java pasti bisa..
BalasHapusini source yg saya buat, saya minta tolong dikoreksi...
Hapuspackage SekolahCrud;
import java.sql.*;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.Color;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class tabelTest {
public static void main(String[] args) {
tabelTest saddingKolom = new tabelTest();
}
public tabelTest(){
JFrame frame = new JFrame("Contoh Sadding Kolom");
JPanel panel = new JPanel();
try{
Class.forName("com.mysql.jdbc.Driver");
Connection kon = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_latihan?user=root&password=");
String sql = "SELECT * FROM kamar";
Statement sta = kon.createStatement();
ResultSet rse = sta.executeQuery(sql);
while (rse.next()) {
Object[] model = new Object[6];
model[0] = rse.getString("id_kamar");
model[1] = rse.getString("nm_kamar");
model[2] = rse.getString("status");
}
}catch(Exception e){
e.printStackTrace();
}
DefaultTableModel model = new DefaultTableModel(data,col);
JTable table = new JTable(model);
for(int i=0;i<table.getColumnModel().getColumnCount();i++){
table.getColumnModel().getColumn(i).setCellRenderer(new TabelCellRenderer());
}
JTableHeader header = table.getTableHeader();
header.setBackground(Color.yellow);
JScrollPane pane = new JScrollPane(table);
panel.add(pane);
frame.add(panel);
frame.setSize(460,200);
frame.setUndecorated(true);
frame.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public class TabelCellRenderer extends DefaultTableCellRenderer{
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,boolean hasFocus, int row, int column) {
Component comp=super.getTableCellRendererComponent(table, value, isSelected, isSelected, row, column);
Object objek=table.getModel().getValueAt(row,3);
if(objek.equals("1")){
comp.setBackground(Color.green);
}
else{
comp.setBackground(null);
}return comp;
}
}
}
Terima Kasih
alhamdulillah terimakasih mas" ilmunya,,
BalasHapuskalo ada metode yg lebih sempurna tolong share ya