Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改特定单词';行JTable中的颜色_Java_Swing_Jtable_Tablecellrenderer - Fatal编程技术网

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

Java 更改特定单词';行JTable中的颜色,java,swing,jtable,tablecellrenderer,Java,Swing,Jtable,Tablecellrenderer,我试图弄清楚如何更改JTable中一行中单词的颜色 例如,这是我的一行句子 dmpsrv日志“2013年3月12日星期二15:33:03”(格林尼治标准时间)(DB=SS@2)pid=662user=“s46”node=“B2-W4”执行时间=1(s) 在每一行中,结构都是相同的,我想用粗体显示用户名 但我不知道我该怎么做?有人耍花招吗 谢谢。正如@mKorbel所述,您可以在Swing中使用HTML标记: 此外,您还需要自定义单元渲染器: 示例 这只是实施的一个例子(这并不完全是您所需要的),

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

例如,这是我的一行句子

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

在每一行中,结构都是相同的,我想用
粗体显示用户名

但我不知道我该怎么做?有人耍花招吗


谢谢。

正如@mKorbel所述,您可以在Swing中使用HTML标记:

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

示例

这只是实施的一个例子(这并不完全是您所需要的),但您可以设法使其更加准确:

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;                
    }            
});
table.setDefaultRenderer(Object.class,新的DefaultTableCellRenderer()){
@凌驾
公共组件GetTableCellRenderComponent(JTable表、对象值、布尔isSelected、布尔hasFocus、int行、int列){
getTableCellRenderComponent(表、值、isSelected、hasFocus、行、列);
字符串str=value.toString();
字符串regex=“*?用户=\”*?\“*?”;
Matcher Matcher=Pattern.compile(regex).Matcher(str);
if(matcher.matches()){
regex=“user=\”*?\”;
matcher=Pattern.compile(regex).matcher(str);
while(matcher.find()){
字符串aux=matcher.group();
str=str.replace(aux,“+aux+”);
}
str=“”+str+”;
setText(str);
}                
归还这个;
}            
});
此渲染器在字符串中查找
user=“whateverHere”
模式。如果匹配,则使用相同的子字符串替换此子字符串的所有实例,该子字符串由
标记舍入。最后,用
标记对全文进行排序

有关regex的更多信息,请参见本问答:

由于
DefaultTableCellRenderer
是从
JLabel
(是的,是一个Swing组件!)扩展而来,HTML标记将起作用

屏幕截图


最简单的方法是在渲染器中使用Html。对于本教程或示例,如何搜索此主题?我想您可以通过@camickr在帖子中搜索,但您的结构形式为
dmpsrv log“Tue Mar 12 15:33:03 2013”(GMT)(DB=SS@2)pid=662 user=“s46”node=“B2-W4”执行时间=1(s)
谈论四个五列(如果我错了,请纠正我:-),然后你可以忘记一些特殊的东西,放在渲染器中,只需遵循Oracle教程,这里是SSCCE形式的一堆代码我只有一列,你认为如果我使用JtextFields,会更容易吗?谢谢你的回答,我将尝试并搜索此解决方案!不客气!:)希望能有所帮助。但是仔细阅读教程,了解Swing是如何工作的;)