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

jut*_*tky 17 java swing jlabel sizing

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

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


编辑:

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

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

tra*_*god 8

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

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

  • `显示工具提示中的全文.这几乎就是我想要做的.如果文本被截断以显示工具提示中的全文. (2认同)

Gil*_*anc 6

来自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);
Run Code Online (Sandbox Code Playgroud)

比较size大小JLabel.getSize();


mre*_*mre 5

我想如果组件的首选大小大于其实际大小,那么您会期望截断。为了使它起作用,当然必须已经实现了该组件。

  • 我不知道。如果我设置的首选尺寸大于完全显示文本所需的尺寸,则可能是实际尺寸小于首选尺寸,但文本仍未被截断。 (2认同)