Получить размер JPanel, прежде чем понять - PullRequest
4 голосов
/ 10 октября 2011

Я создал JPanel и уже добавил в него компоненты, и я собираюсь передать этот JPanel в PopUpFactory ... Так можно ли получить размер JPanel перед его передачей?

Я положил в него Jlabel и текст после этого, и я не знаю размер этого текста ...

Ответы [ 3 ]

3 голосов
/ 10 октября 2011

Вы можете установить предпочтительный размер, используя setPreferredSize(Dimension);например,

JPanel pnl = new JPanel(new BorderLayout());
pnl.setPreferredSize(new Dimension(640, 480));

Это значение впоследствии можно будет получить, вызвав getPreferredSize(), и будет использовано при разметке компонента, хотя обратите внимание, что не гарантируется, что он будет фактически отображен в этом размере.

Почему вам на самом деле требуется размер до его рендеринга?Обычно при программировании на Swing вам не нужно иметь дело с явными размерами / размерами, так как выбранный макет позаботится об этих особенностях для вас.

РЕДАКТИРОВАТЬ

Для адресациизапрос OP относительно JTextField, здесь можно вызвать конструктор на основе int, который принимает ожидаемое количество столбцов.Это приводит к тому, что текстовое поле отображается достаточно широким, чтобы поддерживать это количество символов.

Второй момент касается комментария о том, что методы setXXXSize никогда не следует вызывать напрямую и что разработчик должен полагаться исключительно на LayoutManager,Это не всегда уместно - как правило, необходимо установить предпочтительный размер основного фрейма приложения.Например, предположим, что я писал простое браузерное приложение на Swing.Большая часть основного фрейма - это JEditorPane для рендеринга HTML.Если я не установлю предпочтительный размер для этого компонента (или содержащего фрейма) и вызову pack(), кадр, скорее всего, будет отображаться как можно меньше, а не с разумными размерами.

2 голосов
/ 10 октября 2011

JComponents не возвращает getSize, getLocation, getBounds или getXxxSize, если JComponents ранее не было видно на экране или после вызова pack()

но зачем это нужно, потому что использование (правильное и правильное) LayoutManager может делать это автоматически, поэтому существует LayoutManager, действительно, зачем это 1013 *

0 голосов
/ 10 октября 2011

Просто вызовите метод getPreferredSize для JLabel. Независимо от того, реализован ли его контейнер, предпочтительный размер изменится, если вы задаете текст jlabel даже до того, как вы установите его видимым.

...