Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTable在setBackground()上指定列和行号_Java_Swing_Jtable_Tablecellrenderer - Fatal编程技术网

Java JTable在setBackground()上指定列和行号

Java JTable在setBackground()上指定列和行号,java,swing,jtable,tablecellrenderer,Java,Swing,Jtable,Tablecellrenderer,我最近了解到,我可以为JTable创建一个自定义DefaultTableCellRenderer类 但是,我的代码仅对整行进行着色,而不根据条件对要着色的特定列/单元格进行着色 如何在我创建的DefaultTableCellRenderer类中指定行和列 下面是我创建的类 public class Schedule extends JPanel(){ public Schedule(){ schedulesJtbl.setDefaultRenderer(Object.cl

我最近了解到,我可以为
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);
    }  
}
这是时间表

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的第二个条件)被复制,我怎么能只对第2列着色,而不对整行着色,就像我的JTable上现在发生的一样

我希望你能帮助我

多谢各位

schedulesJtbl.setDefaultRenderer(Object.class, new ScheduleTableCellRenderer());
为任何行/列中的所有对象设置默认渲染器

要为特定列设置渲染器,请执行以下操作:

table.getColumnModel().getColumn(???).setCellRenderer( ... );
您还需要重置默认背景:

if (conflict > 0) {
    c.setBackground(Color.RED);
} else if (conflict == 0) {
    c.setBackground(Color.GREEN);
} else {
    c.setBackgrund( table.getBackground() );
}
为任何行/列中的所有对象设置默认渲染器

要为特定列设置渲染器,请执行以下操作:

table.getColumnModel().getColumn(???).setCellRenderer( ... );
您还需要重置默认背景:

if (conflict > 0) {
    c.setBackground(Color.RED);
} else if (conflict == 0) {
    c.setBackground(Color.GREEN);
} else {
    c.setBackgrund( table.getBackground() );
}

可能重复的您是否尝试在列上添加条件,如:if(冲突>0&&col==1)可能重复的您是否尝试在列上添加条件,如:if(冲突>0&&col==1)