Могу ли я получить правильный размер JComponent, прежде чем он будет показан? - PullRequest
8 голосов
/ 22 августа 2011

Когда рассчитывается размер JComponent? После показа на экране или до этого? если я отправлю .getSize() сообщение до .setVisible(true), даст ли я правильный ответ? Спасибо

Ответы [ 4 ]

7 голосов
/ 22 августа 2011

Я иногда проверяю размеры своих компонентов при отладке, чтобы выяснить, почему я не вижу их, например. В большинстве случаев размеры будут реализованы, когда GUI будет визуализирован . Это может произойти, когда pack() или setVisible(true) вызвали в окне верхнего уровня. Моя обычная последовательность вызовов методов - сначала вызвать pack(), так как это говорит менеджерам компоновки разложить компоненты, за которые они отвечают, и устанавливает размеры компонентов и GUI, затем вызывать setLocationRelativeTo(null), чтобы центрировать мой GUI затем вызовите setVisible(true), чтобы отобразить его.

6 голосов
/ 22 августа 2011

Если я правильно понимаю, причина, по которой вы хотите узнать размер компонента, заключается в том, чтобы сбросить размер JWindow после того, как пользователь нажмет кнопку «Дополнительные параметры», не так ли?Я бы предложил сделать следующее: когда пользователь нажимает на эту кнопку, обновите свой пользовательский интерфейс, добавив дополнительный компонент, и выполните pack() на JWindow.Размер должен соответствовать нужному размеру.

6 голосов
/ 22 августа 2011

В дополнение к обычной последовательности pack()> setVisible(true)> getPreferredSize() вы можете validate() соответствующую Container для предварительного просмотра геометрии, как показано здесь .

6 голосов
/ 22 августа 2011

Менеджер по расположению отвечает за определение размера компонента, поэтому вы не знаете его фактический размер, пока компонент не будет добавлен в фрейм и фрейм не будет упакован () или сделан видимым.

Если вы используете менеджер макетов, который учитывает предпочтительный размер компонента, вы можете использовать:

component.getPreferredSize();

Почему вы думаете, что вам нужно знать размер? Как правило, вы не беспокоитесь о размерах и позволяете менеджеру верстки выполнять свою работу.

...