У чому головна відмінність між setSize()та setPreferredSize(). Іноді я використовував setSize(), іноді setPreferredSize(), іноді один робить те, що я хочу, іноді інший.
Який дзвінок я повинен використовувати для JFrames та JPanels?
У чому головна відмінність між setSize()та setPreferredSize(). Іноді я використовував setSize(), іноді setPreferredSize(), іноді один робить те, що я хочу, іноді інший.
Який дзвінок я повинен використовувати для JFrames та JPanels?
Відповіді:
Використання залежить від того, чи має батьківський компонент менеджер компонування чи ні.
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встановлює бажаний розмір. Менеджер макета спробує організувати стільки місця для вашого компонента.
Це залежить від того, використовуєте ви менеджер макета чи ні ...