1

我试图弄清楚如何更改 JTable 中行中单词的颜色。

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

dmpsrv 日志“2013 年 3 月 12 日星期二 15:33:03”(格林威治标准时间)(DB=SS@2)pid=662user="s46" node="B2-W4" 执行时间=1(s)

在每一行中,结构都是相同的,我想在bold.

但我不知道我该怎么做?有人给点窍门吗?

谢谢。

4

1 回答 1

3

正如@mKorbel 所说,您可以在 Swing 中使用 HTML 标签:如何在 Swing 组件中使用 HTML

您还需要一个自定义单元格渲染器: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 large string using Regular Expression

作为DefaultTableCellRenderer扩展自JLabel(是的,一个 Swing 组件!)HTML 标签可以解决问题。

截屏

在此处输入图像描述

于 2013-10-24T13:35:36.150 回答