I recently learned that I can create a custom DefaultTableCellRenderer
class for a JTable
.
However, my code only colors the entire row but not the specific columns / cells I want to color based on a condition.
How can I specify the row and column in the DefaultTableCellRenderer
class I created?
So here are the classes I created.
public class Schedule extends JPanel(){
public Schedule(){
schedulesJtbl.setDefaultRenderer(Object.class, new ScheduleTableCellRenderer());
int startTime = 1230, endTime = 1330;
int jtStartTime = scheduleJtbl.getValueAt(0,1);
int jtEndTime = scheduleJtbl.getValueAt(0,2);
int conflictCheck = 0;
// duplicate startTime and endTime
if((startTime == jtStartTime) && (endTime == jtEndTime)){
conflictCheck++
ScheduleTableCellRenderer.setConflict(conflictCheck);
}
//duplicate startTime
else if(startTime == jtStartTime){
conflictCheck++
ScheduleTableCellRenderer.setConflict(conflictCheck);
}
}
and here's the ScheduleTableCellRenderer
public class ScheduleTableCellRenderer extends DefaultTableCellRenderer {
static int conflict = 0;
@Override
public Component getTableCellRendererComponent(
JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int col) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
if (conflict > 0) {
c.setBackground(Color.RED);
} else if (conflict == 0) {
c.setBackground(Color.GREEN);
}
return c;
}
public static void setConflict(int aConflict) {
conflict = aConflict;
}
}
If it's only startTime(as second condition on if) that duplicated, how can I color only column 2 but not the entire row just like what is happening right now on my JTable.
I hope you can help me.
Thank you.