Qual é a principal diferença entre setSize()
e setPreferredSize()
. Às vezes eu costumava setSize()
, às vezes setPreferredSize()
, às vezes um faz o que eu quero, às vezes o outro.
Que chamada devo usar para JFrame
s e JPanel
s?
O uso depende se o pai do componente tem um gerenciador de layout ou não.
setSize()
- use quando um gerenciador de layout pai não existir;setPreferredSize()
(também está relacionado setMinimumSize
e setMaximumSize
) - use quando existir um gerenciador de layout pai.O setSize()
método provavelmente não fará nada se o pai do componente estiver usando um gerenciador de layout; os lugares isso irá normalmente têm um efeito seria em componentes de nível superior ( JFrame
s e JWindow
s) e as coisas que estão dentro de painéis rolado. Você também deve chamar setSize()
se tiver componentes dentro de um pai sem um gerenciador de layout.
Geralmente, setPreferredSize()
fará o layout dos componentes conforme o esperado se um gerenciador de layout estiver presente; a maioria dos gerenciadores de layout trabalham obtendo os tamanhos preferidos (bem como mínimo e máximo) de seus componentes e, em seguida, usando setSize()
e setLocation()
posicionando esses componentes de acordo com as regras do layout.
Por exemplo, a BorderLayout
tenta fazer com que os limites de sua região "norte" sejam iguais ao tamanho preferido de seu componente norte --- eles podem acabar maiores ou menores que isso, dependendo do tamanho de JFrame
, o tamanho dos outros componentes no layout e assim por diante.
setSize()
ousetBounds()
pode ser usado quando nenhum gerenciador de layout está sendo usado.No entanto, se você estiver usando um gerenciador de layout, você pode fornecer dicas para o gerenciador de layout usando
setXXXSize()
métodos comosetPreferredSize()
esetMinimumSize()
etc.E certifique-se de que o container do componente usa um gerenciador de layout que respeita o tamanho solicitado. A
FlowLayout
,GridBagLayout
eSpringLayout
os gerentes usam tamanho preferido do componente (os dois últimos, dependendo das limitações que você definiu), masBorderLayout
eGridLayout
geralmente don't.If você especificar novas sugestões de tamanho para um componente que já está visível, você precisa chamar o método revalidate em para certificar-se de que sua hierarquia de contenção seja apresentada novamente. Em seguida, invoque o método repaint.fonte
setSize
irá redimensionar o componente para o tamanho especificado.setPreferredSize
define o tamanho preferido. O componente pode não ter realmente este tamanho, dependendo do tamanho do contêiner em que está ou se o usuário redimensionou o componente manualmente.fonte
IIRC ...
setSize
define o tamanho do componente.setPreferredSize
define o tamanho preferido. O Layoutmanager tentará arranjar tanto espaço para o seu componente.Depende se você está usando um gerenciador de layout ou não ...
fonte