Java: Различие между setPreferredSize () и setSize () методы в компонентах

Вы не можете действительно вынудить GC очистить объект, когда Вы хотите, хотя существуют способы вынудить его работать, ничто не говорит, что это - уборка весь объект, который Вы хотите/ожидаете. Лучше звонить, располагают в выгоде попытки исключая, наконец располагают попытку конца (VB.NET rulz) путь. Но Расположите, для чистки системных ресурсов (память, дескрипторы, соединения дб, и т.д. выделенные объектом детерминированным способом. Расположите не делает (и не может) очищать память, используемую самим объектом, только, GC может сделать это.

101
задан 0x6C38 25 May 2013 в 16:20
поделиться

4 ответа

Краткий ответ: : это сложно.

Более длинный ответ: используйте setSize () , если у вашего родительского компонента нет диспетчера компоновки, и setPreferredSize () и связанный с ним setMinimumSize и setMaximumSize , если это так.

setSize () , вероятно, ничего не сделает, если родительский компонент компонента использует диспетчер компоновки; обычно это влияет на компоненты верхнего уровня ( JFrames и JWindows ) и вещи, которые находятся внутри прокручиваемых панелей . Вы также должны вызвать setSize () , если вы у вас есть компоненты внутри родителя без менеджера компоновки.

Как правило, setPreferredSize () должен поступать «правильно», если у вас есть менеджер компоновки; большинство менеджеров компоновки работают, получая предпочтительные (а также минимальные и максимальные) размеры своих компонентов, а затем используя setSize () и setLocation () для размещения этих компонентов в соответствии с правила верстки. Итак (в качестве примера) BorderLayout попытается сделать границы своего «северного» региона равными предпочтительному размеру его северного компонента - они могут оказаться больше или меньше, чем что, в зависимости от размера jframe , размера других компонентов в макете и т. д.

Как правило, setPreferredSize () должен поступать «правильно», если у вас есть менеджер по расположению; большинство менеджеров компоновки работают, получая предпочтительные (а также минимальные и максимальные) размеры своих компонентов, а затем используя setSize () и setLocation () для размещения этих компонентов в соответствии с правила верстки. Итак (в качестве примера) BorderLayout попытается сделать границы своего «северного» региона равными предпочтительному размеру его северного компонента - они могут оказаться больше или меньше, чем что, в зависимости от размера jframe , размера других компонентов в макете и т. д.

Как правило, setPreferredSize () должен поступать «правильно», если у вас есть менеджер по расположению; большинство менеджеров компоновки работают, получая предпочтительные (а также минимальные и максимальные) размеры своих компонентов, а затем используя setSize () и setLocation () для размещения этих компонентов в соответствии с правила верстки. Итак (в качестве примера) BorderLayout попытается сделать границы своего «северного» региона равными предпочтительному размеру его северного компонента - они могут оказаться больше или меньше, чем что, в зависимости от размера jframe , размера других компонентов в макете и т. д.

у вас есть менеджер по расположению; большинство менеджеров компоновки работают, получая предпочтительные (а также минимальные и максимальные) размеры своих компонентов, а затем используя setSize () и setLocation () для размещения этих компонентов в соответствии с правила верстки. Итак (в качестве примера) BorderLayout попытается сделать границы своего «северного» региона равными предпочтительному размеру его северного компонента - они могут оказаться больше или меньше, чем что, в зависимости от размера jframe , размера других компонентов в макете и т. д.

у вас есть менеджер по расположению; большинство менеджеров компоновки работают, получая предпочтительные (а также минимальные и максимальные) размеры своих компонентов, а затем используя setSize () и setLocation () для размещения этих компонентов в соответствии с правила верстки. Итак (в качестве примера) BorderLayout попытается сделать границы своего «северного» региона равными предпочтительному размеру его северного компонента - они могут оказаться больше или меньше, чем что, в зависимости от размера jframe , размера других компонентов в макете и т. д.

а затем с помощью setSize () и setLocation () для размещения этих компонентов в соответствии с правилами макета. Итак (в качестве примера) BorderLayout попытается сделать границы своего «северного» региона равными предпочтительному размеру его северного компонента - они могут оказаться больше или меньше, чем что, в зависимости от размера jframe , размера других компонентов в макете и т. д.

а затем с помощью setSize () и setLocation () для размещения этих компонентов в соответствии с правилами макета. Итак (в качестве примера) BorderLayout попытается сделать границы своего «северного» региона равными предпочтительному размеру его северного компонента - они могут оказаться больше или меньше, чем что, в зависимости от размера jframe , размера других компонентов в макете и т. д.

114
ответ дан 24 November 2019 в 04:44
поделиться

setSize () или setBounds () можно использовать, когда менеджер компоновки не используется.

Однако, если вы используете менеджер компоновки, вы может предоставить подсказки менеджеру компоновки с помощью методов setXXXSize () , таких как setPreferredSize () и setMinimumSize () и т. д.

. контейнер использует диспетчер компоновки, который учитывает запрошенный размер. Менеджеры FlowLayout , GridBagLayout и SpringLayout используют предпочтительный размер компонента (последние два зависят от установленных вами ограничений), но BorderLayout ] и GridLayout обычно этого не делают. Если вы укажете новые подсказки размера для уже видимого компонента, вам нужно вызвать на нем метод revalidate, чтобы убедиться, что его иерархия включения снова выложена. Затем вызовите метод перерисовки.

10
ответ дан 24 November 2019 в 04:44
поделиться

setSize изменит размер компонента до указанного размера.

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

5
ответ дан 24 November 2019 в 04:44
поделиться

IIRC ...

setSize устанавливает размер компонента.

setPreferredSize устанавливает предпочтительный размер. Layoutmanager попытается выделить столько места для вашего компонента.

Это зависит от того, используете ли вы менеджер компоновки или нет ...

4
ответ дан 24 November 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: