2010-12-12 4 views
1

У меня проблема при попытке изменить размер JLabel. В моем приложении появится следующий strucutre. Понять каждый элемент списка, как что-то внутри предыдущего элемента списка.Изменить предпочтительный размер JLabel после setVisible JFrame

  • JFrame (Layout null, фиксированный размер, не изменяет размер, используется разными людьми).

  • JPanel (Layout null, с размером всего окна, место, где я поместил свою работу).

  • различные JPanel с различными макетами (области содержимого внутри основной панели, вы можете думать об этом как html divs ...).

  • Внутри одного из этих «divs» с макетом null существуют расширенные классы JPanel с компоновкой потока.

  • Внутри каждого из этих расширенных классов есть метки с предпочтительными размерами.

Дело в том, что после создания всего этого я вызываю theFrame.setVisible (true); и все работает должным образом.

Но в момент подачи моего приложения я должен изменить размер одной из меток. Затем я просто вызываю label.setPreferredSize (d), и изменение не изменяется. Функция работает эффективно, если я вызываю ее перед тем, как установить видимый кадр, но не после.

У меня такое ощущение, что проблема в том, что я не использую ничего подобного pack(), validate(), repaint() и т. Д. Потому что я не знаю, что это работает. Я пытаюсь перерисовать вызов и проверять jlabel и перерисовывать основную панель, но не работает.

Я относительно новый, с awt и swing, и это для домашней работы. Извините за мое плохое использование английского языка, и спасибо за вашу помощь.

ответ

1

После того, как вы измените размер своей JLabel, позвоните revalidate(). Это приведет к изменению размера JLabel, не дожидаясь события, которое инициирует повторную компоновку (например, изменение размера родительского фрейма и т. Д.).

JLabel lbl_test; 

lbl_test.setPreferredSize(new Dimension(100, 100)); 
lbl_test.revalidate(); 

Еще одна вещь, о которой нужно помнить, поскольку я не уверен, с каким классом у вас возникают проблемы. Нулевые макеты (абсолютное позиционирование), смешанные с менеджерами макетов, будут вызывать некоторые странные вещи.

+0

Очень благодарю вас. Это работает. Благодарим вас за разъяснение относительно использования revalidate. – davidgnin

Смежные вопросы