ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-如何将我的JTable中第一行的颜色设置为任何颜色,并在表中保留先前设置的颜色

2019-10-13 08:00:17  阅读:187  来源: 互联网

标签:java colors swing jtable row


我已经阅读了很多有关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;

}

不幸的是,当前解决方案仅使用最新配置的颜色为第一行着色,但是先前着色的行会丢失其颜色并默认进行格式化.

我有什么可能避免这种行为?

诚挚

马库斯

解决方法:

您必须保留渲染器随时在指定位置应用预期颜色所必需的状态. Swing不会为您记住颜色.

您可能想要从表中显示的StatusEvents派生颜色.在这种情况下,您必须阅读渲染器中的状态并应用相应的颜色.

标签:java,colors,swing,jtable,row
来源: https://codeday.me/bug/20191013/1906674.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有