Java 将JXTable与MatchingTextHighlighter一起使用时高亮显示错误 基本问题:
更改TableColumn的宽度时,该方法将参数Java 将JXTable与MatchingTextHighlighter一起使用时高亮显示错误 基本问题:,java,swing,swingx,jxtable,swingx-highlighter,Java,Swing,Swingx,Jxtable,Swingx Highlighter,更改TableColumn的宽度时,该方法将参数Rectangle textR设置为旧值(或“之前的值”)。 如何获取当前(实际)矩形值 一些背景信息和错误修复: 我使用SwingLabs演示中的(示例为SearchDemo.java) 这是一个非常好的开始,只标记JXTable单元格中找到的字符。但是如果我将单元格内容的对齐方式从左侧更改为,则荧光灯的位置会出现一些问题: table.getColumnExt( 1 ).setCellRenderer( new DefaultTableRen
Rectangle textR
设置为旧值(或“之前的值”)。如何获取当前(实际)矩形值
一些背景信息和错误修复: 我使用SwingLabs演示中的(示例为SearchDemo.java) 这是一个非常好的开始,只标记JXTable单元格中找到的字符。但是如果我将单元格内容的对齐方式从
左侧更改为,则荧光灯的位置会出现一些问题:
table.getColumnExt( 1 ).setCellRenderer( new DefaultTableRenderer( null, SwingConstants.RIGHT ) );
或
table.getColumnExt( 1 ).setCellRenderer( new DefaultTableRenderer( null, SwingConstants.CENTER ) );
如果突出显示字符,则会出现三个错误:
情况:JLabel的文本完全可见。
问题是:列越宽(使用columnheader调整大小),越亮的字符会向右漂移(从匹配的字符中消失)
情况:JLabel的文本部分可见(用省略号…)但突出显示的字符串完全可见。
问题是:在调整列宽时,从一个像素到一个字符的荧光灯位置是错误的
情况:JLabel的文本和突出显示的字符串部分可见(荧光灯应位于省略号上)
问题:省略号上的荧光灯在调整列宽时宽度错误(从无像素到正确宽度)。
这是唯一一个在左对齐列中也可见的错误(荧光灯的宽度总是正确的,但有时会向右跳)
第一个bug可以通过在两行中注释掉textR.x
来修复(从MatchingTextHighlighter.java中的第327行开始):
出现了两个较小的问题:
一种是,如果匹配区域从第一个标签字符开始,则荧光灯将从左开始一个像素。如果使用columnheader调整列的宽度,则第二个是在中心对齐的列中跳变的更亮的一个像素。
这两个错误(加上RightToLeft错误)都可以通过这些更改来修复(从MatchingTextHighlighter.java中的第397行开始):
第三个bug可以通过以下方法部分修复(更改XMatchingTextHighlighter.java中的第48行):
现在,荧光灯总是从省略号的第一个像素开始,fix!:-)
但是宽度在调整列大小时不断变化,错误!:-(
在调试MatchingTextHighlighter.java中的第二个和第三个bug(剩下的一半)之后,我认为
String clippedText = SwingUtilities.layoutCompoundLabel(.....)
将参数textR
设置为旧值。调整列大小时,文本矩形的计算宽度似乎“落后一个事件”。因此,高亮显示的位置错误
有人有办法把这个修好吗
感谢阅读所有这些……< P/P>酷!没有意识到这些问题(有其他的,因为它不能处理RTOL)-感谢跟踪他们:-你会考虑贡献他们吗?提交一个问题不要忘记:看到你正在做更多的跟踪:记住图标必须被解释。在您的第一个修复(注释myTextR.x)中,突出显示在带有图标的左对齐标签中的错误位置。虽然没有尝试你最近的建议,但是谢谢你的评论!我应该贡献什么以及如何贡献?Bug报告还是我试图修复它们?最初我想把这个问题发布到java.net swinglabs论坛上。。。但在过去的3天里运气不佳。由于DNS出现故障,Ava.net被关闭。该问题已得到修复,但可能需要一段时间才能环游世界。希望看到您的固定类作为我创建的问题的附件,然后以您的名义提交
return textR.x;//respect the icon and start the highlight at the beginning of the text not at 0
} else if (horizAlignment == SwingConstants.RIGHT
|| (horizAlignment == SwingConstants.TRAILING && leftToRight) //fix for rtol: ! deleted
|| (horizAlignment == SwingConstants.LEADING && !leftToRight)) //fix for rtol: ! added
{
return viewR.width - textR.width;
} else if (horizAlignment == SwingConstants.CENTER) {
return Math.round((viewR.width - textR.width) / 2f) - 1; //round a float to prevent a one-pixel-jumping Highlighter
int end = /* myTextR.x + */ fm.stringWidth(text) + offset;
String clippedText = SwingUtilities.layoutCompoundLabel(.....)