Как мне получить JLabel, чтобы точно предсказать, насколько широким он должен быть? - PullRequest
3 голосов
/ 07 июня 2011

У меня есть ситуация, когда пользователь вводит строку, и мой код создает для нее Jlabel и пытается центрировать ее на полноэкранном JFrame / Pane. Моя проблема в том, чтобы точно отцентрировать его, мне нужно знать его размеры.

Мне нужен способ выяснить, какой длины (ширины) должна быть JLabel, чтобы она соответствовала длине строки и ничего более. Я попытался использовать метод предпочитаемый размер (), который есть у компонентов, и он выглядел ужасно (я передал нулевое значение, чтобы мой пользовательский интерфейс определил предпочтительный размер). Я знаю, как определить высоту, которая работает (размер fontSize + 10px обычно хорош), но я не могу получить ширину.

Я использую абсолютное позиционирование (без LayoutManager).

Спасибо

Ответы [ 4 ]

6 голосов
/ 07 июня 2011

Если вы уже используете шрифт height + 10 для высоты, вы можете легко использовать строку width + x.

Вы будете использовать FontMetrics:

Graphics g;
FontMetrics met = g.getFontMetrics();
int height = met.getHeight();
int width = met.stringWidth(label.getText());
5 голосов
/ 07 июня 2011

Я считаю, что фактическая ширина исходит от getPreferredSize().getWidth(), если вы не установите ее заранее.Попробуйте вывести предпочтительный размер, не устанавливая его в ноль.Используя MigLayout при центрировании компонентов, я обычно использую pref!, чтобы сделать компонент как можно меньшим для всех размеров и избежать упаковки, а затем центрировать его в просторном родительском контейнере.

2 голосов
/ 07 июня 2011

с использованием некоторых из LayoutManager отметьте это Как определить длину графической строки?

1 голос
/ 07 июня 2011

Я настоятельно рекомендую использовать LayoutManager для вашего GUI.Не уверен, почему вы используете абсолютное позиционирование, но это прекрасный пример проблем, которые он вызывает.

FlowLayout имеет простую возможность центрирования, а также поддерживает центрирование многих других менеджеров компоновки.

...