我已经阅读了很多有关Java中CellRendering的知识,并且还从这个很棒的站点访问了其他Q& A.不幸的是,我仍然没有找到以下问题的解决方案:
我想呈现一个显示StatusEvents的JTable-这对于监视正在运行的系统是必需的.但是,这些StatusEvents由时间戳,文本和颜色组成.
我的目标是启用多个彩色行.为了实现这一点,我已经定义了一个新的JTable子类(在Inseration过程中重载了与正在绘制的Row相关的“ getCellRenderer”)和一个新的TableCellRenderer-Subclass,该子类将Color应用于单元格.
方法如下所示:
MyCustomJTable:
@Override
public TableCellRenderer getCellRenderer(int row, int column) {
TableCellRenderer result = super.getCellRenderer(row, column);
if ( row == 0 )
{
result = colcr;
}
return result;
}
colcr是我的自定义CellRenderer,它以以前设置的特定颜色为Cell着色.
新的Cell Renderer外观如??下:
public class ColorCellRenderer extends DefaultTableCellRenderer {
ColorCellRenderer ( )
{
this.m_Color = null;
}
@Override
public Component getTableCellRendererComponent ( JTable table , Object value , boolean isSelected ,
boolean hasFocus, int row, int column)
{
Component c = super.getTableCellRendererComponent
(table, value, isSelected, hasFocus, row, column);
if ( m_Color != null )
{
if ( row == 0 && column == 0)
{
c.setForeground(m_Color);
}
}
return c;
}
public void setColor ( Color c )
{
this.m_Color = c;
}
private Color m_Color;
}
不幸的是,当前解决方案仅使用最新配置的颜色为第一行着色,但是先前着色的行会丢失其颜色并默认进行格式化.
我有什么可能避免这种行为?
诚挚
马库斯