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

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

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


编辑:

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

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

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

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

来自Oracle – 测量文本 :

 // 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()的大小进行比较;

我想如果组件的首选大小大于它的实际大小,那么你可以期望截断。 当然,为了实现这一点,必须已经实现了该组件。

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

吉姆·S

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

 lengthOfChar * numChars 

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

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

要获得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("")) { 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()); }