【问题标题】:Change the specific word's color in the row JTable更改 JTable 行中特定单词的颜色
【发布时间】:2013-11-03 02:46:15
【问题描述】:

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

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

dmpsrv log "Tue Mar 12 15:33:03 2013" (GMT) (DB=SS@2) pid=662 user="s46" node="B2-W4" execution time=1(s)

每一行的结构都是一样的,我想在bold中显示用户名。

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

谢谢。

【问题讨论】:

  • 最简单的方法是在Renderer中使用Html
  • 对于本教程或示例,我如何搜索该主题?
  • 我认为你会在@camickr 的帖子中搜索,但你的结构形式为dmpsrv log "Tue Mar 12 15:33:03 2013" (GMT) (DB=SS@2) pid=662 user="s46" node="B2-W4" execution time=1(s) 谈论四五列(如果我错了,请纠正我:-),那么你可以忘记给渲染器添加一些特别的东西,只需遵循 Oracle 教程,这里有一堆 SSCCE 形式的代码
  • 我只有一栏,你也觉得如果我用JtextFields会不会更容易?

标签: java swing jtable tablecellrenderer


【解决方案1】:

正如@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" 模式。如果匹配,则用&lt;b&gt;&lt;/b&gt; 标记环绕的相同子字符串替换此子字符串的所有实例。最后用&lt;html&gt;&lt;/html&gt;标签包围整个文本。

本问答中有关正则表达式的更多信息:Using Java to find substring of a bigger string using Regular Expression

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

截图

【讨论】:

  • 感谢您的回答,我会尝试搜索此解决方案!
  • 不客气! :) 希望对您有所帮助。但请仔细阅读教程以了解 Swing 的工作原理;)
猜你喜欢
  • 1970-01-01
  • 2013-05-22
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 2015-01-28
  • 2016-06-13
相关资源
最近更新 更多