我已经创建了一个自定义单元格渲染器类来实现此目的。
public class MatchTableCellRenderer extends DefaultTableCellRenderer{
public Component getTableCellRendererComponent (JTable table,
Object obj, boolean isSelected, boolean hasFocus, int row, int column) {
Component cell;
cell = super.getTableCellRendererComponent(
table, obj, isSelected, hasFocus, row, column);
if( ((String[]) ((MatchTableModel) table.getModel()).getRow(row)).length==7 ){
System.out.println(((String[]) ((MatchTableModel) table.getModel()).getRow(row))[0]+" "+((String[]) ((MatchTableModel) table.getModel()).getRow(row))[6]);
cell.setForeground(Color.green);
}
return cell;
}
}
我已将此渲染器设置为由我的表格列使用:
tempColumn = table.getColumnModel().getColumn(0);
tempColumn.setCellEditor(new MacColumnEditor());
tempColumn.setCellRenderer(new MatchTableCellRenderer());
tempColumn = table.getColumnModel().getColumn(1);
tempColumn.setCellEditor(new IpColumnEditor());
tempColumn.setCellRenderer(new MatchTableCellRenderer());
tempColumn = table.getColumnModel().getColumn(2);
DefaultCellEditor dfEditor=new DefaultCellEditor(new JTextField());
dfEditor.setClickCountToStart(2);
tempColumn.setCellEditor(dfEditor);
tempColumn.setCellRenderer(new MatchTableCellRenderer());
我希望包含长度= 7绿色的String []和其他具有默认颜色的行。但有趣的是我的所有行都变成了绿色。你可以看到我有一条印刷线。它打印了4次(我的桌子有12行),但所有的行都是绿色的,而不是4.我做错了什么?
答案 0 :(得分:3)
您可以使用XxxCellRenderer
,但更好,最简单的方法是使用prepareRenderer()
对于正确的代码,您必须覆盖或测试内部if-else跟随patameters
isSelected
hasFocus
柱
行
有关similair问题的更多信息<{3}}和answers
答案 1 :(得分:3)
原因是DefaultTableCellEditor的臭名昭着的颜色内存(TM):您必须设置颜色始终,而不是仅在一个分支中。
if (myCondition) {
setBackground(...) {
} else {
setBackground(...)
}
具体细节在recent thread
中解释