2017-11-20 18 views
0

나는 GridBagLayout에 또 다른 패널이 포함 된 JScrollPane의이 (A JSplitPane를 withing에 JTabbedPane에 withing에있다,하지만 난 그 차이를 만드는 생각하지 않는다).내부 요소의 크기에 따라 패널 크기를 설정합니까?

원하는 것은 간단합니다. ScrollPane의 크기가 너무 작 으면 모든 요소가 표시되도록 세로 스크롤 막대를 표시하십시오. 슬프게도

int prefSize = lastButton.getLocationOnScreen().y + lastButton.getSize().height - myGridPanel.getLocationOnScreen().y; 
myGridPanel.setPreferredSize(new Dimension(400, prefSize)); 

이 유일한 작품 : 그것을 달성하기 위해, 나는 높이를 추가, 마지막 요소의 위치를 ​​취하고 패널 자체의 오프셋 substracts ComponentListener.componentResized에 대한 간단한 함수를 썼다 전 수동으로 창 크기를 조정합니다. 그 전에 스크롤 바는 끝까지 도달하지 못하므로 몇 행에 도달 할 수없고 맨 위의 JTextPane 요소가 부분적으로 숨겨집니다. 내가 말했듯이, 창 크기를 조정하거나 (수직 또는 수평으로 크기를 늘리거나 줄이면), 모든 요소가 정확하며 스크롤바는 마지막 요소 이후까지 정확하게 스크롤됩니다. 마지막 하나를 제외한 모든 행을 스크롤 할 수 있으며,

mainFrame.pack(); 
setPreferredSize(); 
mainFrame.setSize(dim); 
mainFrame.revalidate(); 
mainFrame.repaint(); 

지금 :

나는 (따라서, stateChanged()) 탭에 프레임을 만들 때 다음 사항을 추가하거나 전환하여 상황을 개선 할 수 있었다 마지막 행은 ~ 30 % 밖에 보이지 않습니다. 다시 ... 수동으로 프레임의 크기를 조정하면 모든 것이 의도 한 것처럼 보입니다.

나는 단순한 뭔가를 놓치고있는 것처럼 느껴진다. 그러나 나는 그것이 무엇이 될 수 있는지 전혀 모른다. 주위를 검색하면 추가 제안을 보았습니다. setPreferredSize (panel.getPreferredSize());하지만 도움이되지 못했습니다.

감사합니다.

미리 감사드립니다.

답변

1

주위를 검색하면 setPreferredSize (panel.getPreferredSize())를 추가하는 것이 좋습니다. ,

틀린. 패널의 크기를 관리하지 마십시오. 이것이 레이아웃 관리자의 임무입니다. setPreferredSize()를 사용하지 마십시오!

레이아웃 관리자가 작업을 수행하게하려면 레이아웃 관리자가 자신의 기본 크기를 동적으로 계산하고 필요에 따라 스크롤바가 자동으로 나타납니다.

나는 컴포넌트 수신기를 사용할 필요가없는 ComponentListener.componentResized

에 대한 간단한 함수를 썼다.

일반적으로, 스크롤 구획의 사용법은, 그것을 프레임의 BorderLayout의 CENTER에 추가하는 것입니다. 프레임의 사이즈가 변경되면 (자), 스크로 르페 인의 사이즈가 변경됩니다. 그런 다음 필요에 따라 스크롤 막대가 표시되거나 사라집니다.

+0

흠, 모든게 좋지만 모든 것이 도움이되지 않습니다. 'BorderLayout','BoxLayout' 등을 시도했지만'GridBagLayout'없이 레이아웃을 작동시키는 법을 모르겠습니다. 그리고 이것은'setPreferredSize()'와 관련있는 것을 제외 할 때 확실히 작동하지 않습니다. – Markstar

+0

@Markstar, 음, 질문 할 때마다 문제를 나타내는 적절한 [mcve]를 포함시켜야합니다. 내 조언을 따르는다면 효과가있을 것입니다. 우리는 그것이 작동하지 않도록하기 위해 무엇을하고 있는지 짐작할 수 없습니다. – camickr

+0

예, 알고 있습니다. 나는 내가 간과 한 단순한 것이 있다고 가정/기대했다. 내가 말했듯이,'BorderLayout'을 사용할 수 없습니다. 왜냐하면 텍스트 요소가 정확하게 줄 바꿈되지 않을 것이고 (줄 바꿈 등으로) 중첩도 작동하지 않기 때문입니다. 최소한의 예제를 찾아 낼 수 있는지 알게 될 것입니다. – Markstar