了解 JLabel 的文本是否超过标签大小

2022-09-02 21:24:38

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

我如何轻松了解当前JLabel显示的是全文还是截断的?


编辑:

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

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


答案 1

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

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


答案 2

来自 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();


推荐