У чому головна відмінність між setSize()
та setPreferredSize()
. Іноді я використовував setSize()
, іноді setPreferredSize()
, іноді один робить те, що я хочу, іноді інший.
Який дзвінок я повинен використовувати для JFrame
s та JPanel
s?
У чому головна відмінність між setSize()
та setPreferredSize()
. Іноді я використовував setSize()
, іноді setPreferredSize()
, іноді один робить те, що я хочу, іноді інший.
Який дзвінок я повинен використовувати для JFrame
s та JPanel
s?
Відповіді:
Використання залежить від того, чи має батьківський компонент менеджер компонування чи ні.
setSize()
- використовувати, коли не існує батьківського менеджера макетів;setPreferredSize()
(також пов'язані з ним setMinimumSize
та setMaximumSize
) - використовувати, коли існує батьківський менеджер макетів.setSize()
Метод , ймовірно , не буде нічого робити , якщо батько компонента використовує менеджер компонування; місця це, як правило , має ефект буде на компонентах верхнього рівня ( JFrame
з і JWindow
с) і речами, які всередині прокручуються панелі. Ви також повинні зателефонувати, setSize()
якщо у вас є компоненти всередині батька без менеджера макетів.
Як правило, setPreferredSize()
викладають компоненти, як очікувалося, якщо присутній менеджер компонування; Більшість менеджерів макетів працюють, отримуючи бажані (а також мінімальні та максимальні) розміри своїх компонентів, потім використовуючи setSize()
та setLocation()
розміщуючи ці компоненти відповідно до правил компонування.
Наприклад, BorderLayout
намагається зробити межі своєї "північної" області рівними бажаному розміру її північної складової --- вони можуть закінчитися більшими або меншими, ніж залежно від розміру JFrame
, розміру інших компонентів в макеті тощо.
setSize()
або setBounds()
може використовуватися, коли не використовується диспетчер макетів.
Однак якщо ви використовуєте диспетчер макетів, ви можете надати підказки менеджеру компонування, використовуючи такі setXXXSize()
методи, як setPreferredSize()
і setMinimumSize()
т.д.
І будьте впевнені, що контейнер компонента використовує диспетчер макетів, який дотримується запитуваного розміру. FlowLayout
, GridBagLayout
І SpringLayout
менеджери використовують бажаний розмір компонента (останні два в залежності від обмежень , встановлених вами), але BorderLayout
і , як GridLayout
правило , don't.If вам вказати нові підказки по розміру для компонента , який вже видно, вам потрібно викликати метод перевірити ще раз на щоб переконатися, що її ієрархія стримування буде знову викладена. Потім застосуйте метод перефарбовування.
setSize
змінить розмір компонента до заданого розміру.
setPreferredSize
встановлює бажаний розмір. Компонент насправді не може бути такого розміру, залежно від розміру контейнера, у якому він знаходиться, або якщо користувач повторно змінив розмір компонента вручну.
IIRC ...
setSize
встановлює розмір компонента.
setPreferredSize
встановлює бажаний розмір. Менеджер макета спробує організувати стільки місця для вашого компонента.
Це залежить від того, використовуєте ви менеджер макета чи ні ...