【问题标题】:JTable Specifying column and row number on setBackground()JTable在setBackground()上指定列号和行号
【发布时间】: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 列而不是整行着色。

我希望你能帮助我。

谢谢。

【问题讨论】:

标签: java swing jtable tablecellrenderer


【解决方案1】:
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() );
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2014-10-07
    • 2021-09-27
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多