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


这就是包装的意思。

09-11 18:53
查看更多