所以我知道这可能是一个重复的问题,但我已经浏览了许多已经存在的问题,而且似乎没有一个对我有用,所以我想我会发布自己的,希望其他的一些遇到此问题的人会发现这也很有帮助。
这是我的代码
table.getColumn("Name").setCellRenderer(
new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setText(value.toString());
if (row==3)
{
setForeground(Color.RED);
}
return this;
}
}
);
以下是JFrame中显示的内容。正如您所看到的,我正在尝试仅为“名称”列的第三行中的文本着色,但它会为整行着色。
有什么建议吗? 谢谢! 迦南
答案 0 :(得分:4)
渲染对于“名称”列是唯一的。当行为3时,您将红色设置为前景色,但是您不为其他行重置它,因此当调用画家时,它总是涂成红色。 当行为3时你必须设置红色,但在其他情况下你还必须重置原始颜色。
编辑:执行版本。现在备份原始前景色,而super用于像其他列一样呈现。
table.getColumn("Name").setCellRenderer(
new DefaultTableCellRenderer() {
Color originalColor = null;
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
DefaultTableCellRenderer renderer = (DefaultTableCellRenderer) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (originalColor == null) {
originalColor = getForeground();
}
if (value == null) {
renderer.setText("");
} else {
renderer.setText(value.toString());
}
if (row == 3) {
renderer.setForeground(Color.RED);
} else {
renderer.setForeground(originalColor); // Retore original color
}
return renderer;
}
});