更改JTable行中特定单词的颜色

时间:2013-10-24 11:51:51

标签: java swing jtable tablecellrenderer

我试图找出如何更改JTable中行中单词的颜色。

例如,这是我的一行中的句子;

dmpsrv log“Tue Mar 12 15:33:03 2013”​​(GMT)(DB = SS @ 2)pid = 662 user="s46" node =“B2-W4”执行时间= 1(s)

在每一行中结构都相同,我想在bold中显示用户名。

但我不知道怎么办呢?有没有人给出一些技巧?

感谢。

1 个答案:

答案 0 :(得分:3)

正如@mKorbel所说,你可以在Swing中使用HTML标签:How to Use HTML in Swing Components

此外,您还需要自定义单元格渲染器:Using Custom Renderers

示例

这只是只是一个示例的实现(它不是完全你需要的)但你可以设法让它更准确:

table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer(){

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

        super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

        String str = value.toString();
        String regex = ".*?user=\".*?\".*?";
        Matcher matcher = Pattern.compile(regex).matcher(str);
        if(matcher.matches()){
            regex = "user=\".*?\"";
            matcher = Pattern.compile(regex).matcher(str);
            while(matcher.find()){
                String aux = matcher.group();
                str = str.replace(aux, "<b>" + aux + "</b>");
            }
            str = "<html>" + str + "</html>";

            setText(str);
        }                
        return this;                
    }            
});

此渲染器在字符串中查找user="whateverHere"模式。如果匹配,则将该子字符串的所有实例替换为<b></b>标记所包含的相同子字符串。最后用<html></html>标签来覆盖整个文本。

有关此问答语中的正则表达式的更多信息:Using Java to find substring of a bigger string using Regular Expression

DefaultTableCellRendererJLabel延伸时(是的,一个Swing组件!)HTML标签就可以了。

<强>截图

enter image description here