짧은 대답은 ... 당신이 레이아웃 매니저 여부를 사용하는지 여부에 따라 달라집니다 : 그것은 복잡.
경미하게 더 이상 대답은 : 구성 요소의 부모가 관련 setMinimumSize
및 setMaximumSize
는 않는 경우가 더 레이아웃 매니저이 없으며, setPreferredSize()
및 경우 setSize()
를 사용합니다.
setSize()
은 구성 요소의 부모가 레이아웃 관리자를 사용하고 있다면 아무 것도하지 않습니다. 일반적으로 영향을 줄 장소는 최상위 구성 요소 (JFrames
및 JWindows
)와 내부에있는 내용이 scrolled panes
입니다. 또한 레이아웃 관리자가없는 부모 내에 구성 요소가있는 경우 setSize()
으로 전화해야합니다.
일반적으로 setPreferredSize()
은 레이아웃 관리자가 있으면 '옳은 일'을 수행해야합니다. 대부분의 레이아웃 관리자는 구성 요소의 기본 크기 (최소 및 최대)를 얻은 다음 setSize()
및 setLocation()
을 사용하여 레이아웃의 규칙에 따라 해당 구성 요소를 배치합니다. 따라서 (예를 들어) BorderLayout
은 북쪽 구성 요소의 preferred size
과 동일한 "북쪽"영역의 경계를 만들려고합니다. jframe
의 크기에 따라 북쪽 구성 요소의 크기가 더 크거나 작아 질 수 있습니다. 레이아웃의 다른 구성 요소 등.
구성 요소가 기본적으로 레이아웃 관리자 (BorderLayout?)를 사용하고 있다고 생각했기 때문에 레이아웃 관리자를 명시 적으로 설정하지 않으면 setPreferredSize() 대신 setSize()를 사용해야합니까? –
JPanels는 기본적으로 BorderLayout을 사용하지만 JComponent에는 기본 레이아웃이 없다고 생각합니다. 대부분의 경우, setSize()를 사용하는 대신 무언가를 추가하는 경우 레이아웃 관리자를 설정하는 것이 좋습니다. – Sbodd
항상 레이아웃 관리자를 사용하는 것이 좋습니다. SetSize()는 레이아웃 관리자가 호출하는 것으로 생각해야합니다. 사용자가 호출하는 것이 아닙니다. –