我试图弄清楚如何更改 JTable 中行中单词的颜色。
例如,这是我在一行中的句子;
dmpsrv 日志“2013 年 3 月 12 日星期二 15:33:03”(格林威治标准时间)(DB=SS@2)pid=662user="s46"
node="B2-W4" 执行时间=1(s)
在每一行中,结构都是相同的,我想在bold
.
但我不知道我该怎么做?有人给点窍门吗?
谢谢。
我试图弄清楚如何更改 JTable 中行中单词的颜色。
例如,这是我在一行中的句子;
dmpsrv 日志“2013 年 3 月 12 日星期二 15:33:03”(格林威治标准时间)(DB=SS@2)pid=662user="s46"
node="B2-W4" 执行时间=1(s)
在每一行中,结构都是相同的,我想在bold
.
但我不知道我该怎么做?有人给点窍门吗?
谢谢。
正如@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 标签可以解决问题。
截屏