嗯,这是我在这里的第一篇文章。但我有点沮丧,因为我到处都搜索,但没有任何工作。我有JTable
并且代码在if(value.equals("CMAU1294522")
)之后的行下方按预期工作..但是只有一个单元格显示方框。我点击了一个特定的行,我希望整行显示浅灰色(我认为这是标准的)。
table = new JTable(sorter) {
public Component prepareRenderer(TableCellRenderer renderer, int row, int col) {
Component comp = super.prepareRenderer(renderer, row, col);
Object value = getModel().getValueAt(row, col);
UIManager.put("Table.editRow", new javax.swing.plaf.ColorUIResource(Color.YELLOW));
if(editingRow ==1){
table.setSelectionBackground(Color.red);
}
if (getSelectedRow() == row) {
table.setSelectionBackground(Color.red);
}
if (value.equals("CMAU1294522")) {
comp.setBackground(Color.red);
} else if (value.equals("PNCT")) {
comp.setBackground(Color.green);
} else if (NewJApplet.contReady.containsKey(value)) {
comp.setBackground(Color.CYAN);
} else if (NewJApplet.badCont.containsKey(value)) {
comp.setBackground(Color.red);
} else {
comp.setBackground(Color.white);
}
return comp;
}
有没有办法在我已有的prepareRenderer
函数中执行此操作?
答案 0 :(得分:1)
我有没有办法在PreparRenerere函数中做到这一点?
您编码以获得"值"是错的。您始终获得正在呈现的当前单元格的值。如果要根据特定值突出显示整行,则需要对列进行硬编码:
Object value = getModel().getValueAt(row, ???);
此外,看起来您正在对表中的数据进行排序,因此您应该使用getValueAt(...)而不是getModel()。getValueAt(),因此您检查排序表中的数据,而不是数据在未分类的模型中。
查看Table Row Rendering中的示例代码以获取工作示例。