我正在研究课程,并且我一直在努力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),我需要红色,而对于可用的书,我需要绿色。 到目前为止,我尝试过的操作要么更改整个列要么更改整个行
谢谢!
答案 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
。