我有一种情况,用户输入一个字符串,我的代码为它制作了一个Jlabel,并尝试将其置于全屏JFrame / Pane上。我的问题是,为了能够准确地居中,我需要知道它的尺寸。
我需要一种方法来确定JLabel应该有多长(宽),以便它能够容纳字符串的长度,仅此而已。我尝试使用组件具有的preferredSize()方法,它看起来很糟糕(我传递了一个空值,让我的UI确定preferredSize)。我知道如何找出有效的高度(fontSize + 10px的大小通常很好),但我无法获得宽度。
我正在使用绝对定位(没有LayoutManager)。
由于
答案 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
具有简单的居中能力,许多其他布局管理器也支持居中。