Java 更改特定单词';行JTable中的颜色
我试图弄清楚如何更改JTable中一行中单词的颜色 例如,这是我的一行句子 dmpsrv日志“2013年3月12日星期二15:33:03”(格林尼治标准时间)(DB=SS@2)pid=662Java 更改特定单词';行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标记: 此外,您还需要自定义单元渲染器: 示例 这只是实施的一个例子(这并不完全是您所需要的),
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是如何工作的;)