[英]JTable-Paint the content(text) in a cell
我有一个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>");
这就是我的意思。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.