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

标签 java swing search jtable tablecellrenderer

我有一个 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;
                                }
                }
            }

最佳答案

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

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

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

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

编辑:

通常,当您向使用的标签添加文本时:

label.setText("user1005633");

如果您想突出显示任何包含“100”的文本,那么您需要执行以下操作:

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

这就是我所说的包装的意思。

关于java - JTable-绘制单元格中的内容(文本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16740332/

相关文章:

php - 我试图让这段代码进行多个关键字搜索

php - 当我们从mysql数据库获取数据时出现错误如何正确

java - 如何在不更改任何一组的情况下找到两组之间的差异?

java - 如何在 Blue J 中设置 JButton 的坐标?

java - 如何在循环链表中插入字符串(我想检查循环链表中的重复单词)?

Java swing应用程序框架支持

java - 标记不会改变

search - ElasticSearch 默认评分机制

java - 将字符串转换为长 android

java - JSF 2 小时 :message in composite component can't find id of input