在JTABLE中更改特定单元格的颜色

时间:2018-11-29 12:31:56

标签: java jtable cell renderer

我正在研究课程,并且我一直在努力3星期,只为特定单元格更改颜色。根据某些条件,我需要红色和绿色:

def SearchCreateView(request):
    template_name = 'SearchCreateView_form.html'
    model = Search
    form_class = SearchCreateViewForm

    if request.method == 'POST':
        if form.is_valid():
            form = SearchCreateViewForm(request.POST or None, instance=search.user)
            print(form.errors.as_text())
            search = form.save(commit=False)
            form.instance.search.user = self.request.search.user
            return render_to_response(request, 'search.html', {'form': form})
        else:
            context = {'form': form}
            return render_to_response(request, 'save.html', context)
    else:
        form = SearchCreateViewForm(request.POST or None)
        return render(request, 'SearchCreateView_form.html', {'form': form})

如您所见,我正在使用另一个类的数组, 对于不可用的书(.getAvailability()== 1),我需要红色,而对于可用的书,我需要绿色。 到目前为止,我尝试过的操作要么更改整个列要么更改整个行

谢谢!

1 个答案:

答案 0 :(得分:0)

突出显示的代码有两个明显的问题(格式和长方法主体除外)。

this.setOpaque(true);
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasocus, row, col);

应该是

Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
c.setOpaque(true);

您应该只为要处理的书设置前景。

Color redColor = Color.RED;
Color greenColor = Color.GREEN;
//books color
for(int i=0;i<bookCount;i++){
if (library.bookArray[i].getAvailability()==1){
    c.setForeground(redColor);
}else{
    c.setForeground(greenColor);
}}

应该是:

c.setForeground(
    library.bookArray[row].getAvailability()==1 ?
    Color.RED :
    Color.GREEN
);

编辑:接下来,我注意到您已将类型String的列的自定义渲染器设置为默认值,但尚未设置列的Class(运行时除非您自己进行检查,否则不检查单个单元格值的类型。最好为TableColumn.setCellRenderer的相关列调用TableColumnModel