找出JLabel的文本是否超过标签大小

时间:2011-11-01 18:35:49

标签: java swing jlabel sizing

在Java中,当由于空间不足而无法显示JLabel的文本时,文本被截断并且最后添加了“...”。

如何轻松找出当前JLabel是显示全文还是截断?


编辑:

我发现有一种方法可以使用FontMetrics找出文本的大小。但是,此解决方案并未完全回答这个问题。在JLabel的文本包含HTML装饰的情况下,metrics.stringWidth()也将计算HTML标签的宽度。因此,metrics.stringWidth()的结果可能会比JLabel的宽度更大,但文本仍会正确显示。

有没有办法知道在显示文本时JLabel本身做出了什么决定。它是否决定截断文本。

6 个答案:

答案 0 :(得分:8)

省略号由标签的UI委托添加,通常是BasicLabelUI的子类,作为其布局和首选大小计算的一部分。可以覆盖方法layoutCL()以检查几何体,如example所示。

实际上,我会忽略省略并在工具提示中显示全文。

答案 1 :(得分:6)

来自Oracle - Measuring Text

// get metrics from the graphics
FontMetrics metrics = graphics.getFontMetrics(font);
// get the height of a line of text in this font and render context
int hgt = metrics.getHeight();
// get the advance of my text in this font and render context
int adv = metrics.stringWidth(text);
// calculate the size of a box to hold the text with some padding.
Dimension size = new Dimension(adv+2, hgt+2);

sizeJLabel.getSize();

的大小进行比较

答案 2 :(得分:4)

我想如果组件的首选大小大于它的实际大小,那么你可以期待截断。当然,要使其工作,组件必须已经实现

答案 3 :(得分:3)

检查this并查看layoutCompoundLabel()方法。它返回一个表示标签文本的String。您可以将其与原始文件进行比较,以确定是否会剪切它。

Jim S。

答案 4 :(得分:1)

通常的方法是使用一种方法来计算文本的预期大小,因为它将显示在标签中。如果您使用的是等宽字体,这很容易:

lengthOfChar * numChars

如果你没有使用等宽字体,那显然要困难得多。我认为有一些实用程序试图计算这个。

获得显示字符串的大小后,您可以与JLabel的长度进行比较,看看标签是否太小。

答案 5 :(得分:0)

要获取html文字的大小,请检查此https://www.java.net/node/665691

View view = (View) javax.swing.plaf.basic.BasicHTML.createHTMLView(label, value.toString());
int width = (int) view.getPreferredSpan(View.X_AXIS);
int height = (int) view.getPreferredSpan(View.Y_AXIS);

唯一的小问题是它可能与非HTML文本有关。因此,只需使用非html字符串的字体指标。以下对我来说非常有用:

if (value.toString().startsWith("<html>")) {
   View view = (View) javax.swing.plaf.basic.BasicHTML.createHTMLView(label, value.toString());
   width = (int) view.getPreferredSpan(View.X_AXIS);
} 
else {
   width =  (int) label.getFontMetrics(label.getFont()).stringWidth(value.toString());
}