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

时间:2011-06-07 13:36:04

标签: java swing components awt jlabel

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

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

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

由于

4 个答案:

答案 0 :(得分:6)

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

您将使用FontMetrics

Graphics g;
FontMetrics met = g.getFontMetrics();
int height = met.getHeight();
int width = met.stringWidth(label.getText());

答案 1 :(得分:5)

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

答案 2 :(得分:2)

答案 3 :(得分:1)

我强烈建议您使用LayoutManager作为GUI。不确定为什么使用绝对定位,但这是它引起的问题的一个完美的例子。

FlowLayout具有简单的居中能力,许多其他布局管理器也支持居中。