当我将
HTML标记组合到JLabel文本中时,我忽略了当空间太小而无法显示完整文本时显示的省略号行为.在我的特定情况下,它是一个TableCellRenderer,它扩展了JLabel(swing的默认值或其他).现在,当列宽太小而文本无法完全显示时,它不会显示省略号.
请参见下图,例如:
对于左栏,我使用HTML将文本包装在渲染器中:setText(“< html>”“< strong>”value.toString()“< / strong>”“< / html>”);.正如您所看到的,当列宽太小而无法包含文本时,它只是被剪切.但是,右列显示日期和时间并使用DefaultTableCellRenderer在无法包含完整文本时显示省略号.
所以我的问题是,我可以同时拥有两个吗?意思是,用HTML包装文本仍然得到省略号?
更新:
我发现在使用HTML时没有得到省略号的原因.我按照JComponent#paintComponent(Graphics g)中的代码一直到BasicLabelUI#layoutCL(…).请参阅从上一个中获取的以下代码段.如果它没有html属性,它只剪裁字符串(当标签文本用html包装时为true).但我不知道如何解决它:
v = (c != null) ? (View) c.getClientProperty("html") : null; if (v != null) { textR.width = Math.min(availTextWidth,(int) v.getPreferredSpan(View.X_AXIS)); textR.height = (int) v.getPreferredSpan(View.Y_AXIS); } else { textR.width = SwingUtilities2.stringWidth(c,fm,text); lsb = SwingUtilities2.getLeftSidebearing(c,text); if (lsb < 0) { // If lsb is negative,add it to the width and later // adjust the x location. This gives more space than is // actually needed. // This is done like this for two reasons: // 1. If we set the width to the actual bounds all // callers would have to account for negative lsb // (pref size calculations ONLY look at width of // textR) // 2. You can do a drawString at the returned location // and the text won't be clipped. textR.width -= lsb; } if (textR.width > availTextWidth) { text = SwingUtilities2.clipString(c,text,availTextWidth); textR.width = SwingUtilities2.stringWidth(c,text); } textR.height = fm.getHeight(); }
解决方法
原文地址:https://www.jb51.cc/html/225664.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。