【发布时间】:2016-08-23 03:28:58
【问题描述】:
我最近了解到我可以为JTable 创建一个自定义DefaultTableCellRenderer 类。
但是,我的代码只为整行着色,而不是我想根据条件着色的特定列/单元格。
如何在我创建的DefaultTableCellRenderer 类中指定行和列?
这是我创建的类。
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);
}
}
这里是 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;
}
}
如果它只是重复的 startTime(作为 if 的第二个条件),我怎么能像现在在我的 JTable 上发生的那样只为第 2 列而不是整行着色。
我希望你能帮助我。
谢谢。
【问题讨论】:
-
您是否尝试过在列上添加条件,例如:if (conflict > 0 && col == 1)
标签: java swing jtable tablecellrenderer