JTable-在单元格中绘制内容(文本)

Posted

技术标签:

【中文标题】JTable-在单元格中绘制内容(文本)【英文标题】:JTable-Paint the content(text) in a cell 【发布时间】:2013-05-20 08:55:01 【问题描述】:

我有一个 JTable,我有一个在表格行和列中实现搜索的方法,我使用正则表达式,我想绘制(例如黄色)与单元格中的正则表达式匹配的文本。我想绘制文本而不是单元格的背景,而只绘制与 reg 表达式匹配的单词部分。 我的搜索方法的代码是:

        for (int row = 0; row <= table.getRowCount() - 1; row++) 

            for (int col = 0; col <= table.getColumnCount() - 1; col++) 

                Pattern p = Pattern.compile("(?i)" + search_txt.getText().trim());
                Matcher m = p.matcher(table.getValueAt(row, col).toString().trim());
                if (m.find())

                    isFound = true;

                    table.scrollRectToVisible(table.getCellRect(row, 0, true));

                    table.setRowSelectionInterval(row, row);
                    break;
                                
                
            

【问题讨论】:

【参考方案1】:

您将需要一个自定义渲染器来执行此操作。

默认渲染器是 JLabel。因此,这样做的唯一方法是将 html 包裹在您的文本字符串周围并更改您正在搜索的文本的字体颜色。您需要将搜索文本传递给渲染器,以便渲染器确定要突出显示的文本。

您发布的代码有一个问题,它总是会滚动到表格的底部。那么你的具体要求是什么。您想一次突出显示所有单元格吗?或者你只是想要一个“下一步”按钮,它可以找到下一个带有文本的单元格。在第一种情况下,您不想自动滚动表格。在第二种情况下,您将滚动表格。

此外,根据要求,您需要重新绘制整个表格(如果您一次显示所有出现)或仅当前行(如果您有下一个功能)。

编辑:

通常当您将文本添加到您使用的标签时:

label.setText("user1005633");

如果您想突出显示任何包含“100”的文本,那么您需要这样做:

label.setText("<html>user<font color="yellow">100</font>5633</html>");

这就是我所说的包装。

【讨论】:

我想要一个下一个按钮来查找下一个匹配项并突出显示匹配的文本...谢谢! 好吧,我给你一个方法,我就不给你写代码了。 好吧,我不是在问代码 :-) ...顺便说一句,我不明白 HTML wrap 的部分... +1 非常好的建议,描述,@user1005633 not easy job, could be possible without Html

以上是关于JTable-在单元格中绘制内容(文本)的主要内容,如果未能解决你的问题,请参考以下文章

在Jtable单元格中的复选框旁边插入文本

在 JTable 的单元格中添加按钮以及数据?

更改单元格颜色而不更改其他单元格中的颜色(Jtable)

在特定JTable单元上设置焦点和闪烁光标

Java - 是不是可以将图像和字符串放在同一个 JTable 单元格中?

如何使 JTable 单元格不可编辑但应该能够选择和复制当前单元格中的值