如何让JLabel准确预测应该有多宽?

use*_*643 3 java swing components awt jlabel

我有一种情况,用户输入一个字符串,我的代码为它创建一个Jlabel,并尝试将其集中在全屏JFrame/Pane上.我的问题是,为了能够准确地居中,我需要知道它的尺寸.

我需要一种方法来确定JLabel应该有多长(宽),以便它能够容纳字符串的长度,仅此而已.我尝试使用组件具有的preferredSize()方法,它看起来很糟糕(我传递了一个空值,让我的UI确定preferredSize).我知道如何找出有效的高度(fontSize + 10px的大小通常很好),但我无法得到宽度.

我正在使用绝对定位(没有LayoutManager).

谢谢

jjn*_*guy 6

如果您已经使用字体height + 10作为高度,则可以轻松使用该字符串width + x.

您将使用FontMetrics:

Graphics g;
FontMetrics met = g.getFontMetrics();
int height = met.getHeight();
int width = met.stringWidth(label.getText());
Run Code Online (Sandbox Code Playgroud)


Chr*_*ett 5

我相信实际的宽度来自于getPreferredSize().getWidth()你事先没有设置它.尝试输出首选大小而不将其设置为null.使用MigLayout对中组件时,我通常pref!会使组件尽可能小,适用于所有尺寸并避免包装,然后将其放在宽敞的父容器中.