我试图找出如何更改JTable中行中单词的颜色。
例如,这是我的一行中的句子;
dmpsrv log“Tue Mar 12 15:33:03 2013”(GMT)(DB = SS @ 2)pid = 662 user="s46"
node =“B2-W4”执行时间= 1(s)
在每一行中结构都相同,我想在bold
中显示用户名。
但我不知道怎么办呢?有没有人给出一些技巧?
感谢。
答案 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
当DefaultTableCellRenderer
从JLabel
延伸时(是的,一个Swing组件!)HTML标签就可以了。
<强>截图强>