2011-03-04 1 views
3

NetBeans를 사용하여 Java에서 Swing 응용 프로그램을 만들고 레이아웃에 문제가 있습니다. 내 메인 프레임에는 이라는 contentPanel이 포함되어 있으며 JPanel이라는 listPanel이 포함 된 JScrollPane이 포함되어 있습니다. 프로그램이 시작될 때 listPanel은 비어 있지만 사용자가 프로그램과 상호 작용할 때 예측할 수없는 더 작은 수의 JPanel이 추가됩니다. NetBeans GUI 빌더를 사용하여 상단 가장자리가 listPanel이고 상단이 contentPanel이며 하단 가장자리가 동일합니다.중첩 된 JPanels로 JScrollPane을 올바르게 작동하게하려면 어떻게해야합니까?

문제는 더 많은 구성 요소가 listPanel에 추가되면 세로 스크롤 막대가 내 스크롤 패널에 나타나지 않는다는 것입니다. 내 스크롤 패널의 verticalScrollBarPolicyAS_NEEDED으로 설정되고 viewportViewcontentPanel으로 설정됩니다. 내가해야 할 일은 더 많은 항목이 listPanel에 추가 될 때 contentPanel이 커지도록하는 것입니다.

답변

1

다른 LayoutManager를 사용하십시오. BoxLayout과 같은 수직적 성장을 가능하게하는 하나. 또한 여러 레이아웃을 사용하여 서로 다른 효과를 내기 위해 서로의 레이아웃을 중첩 할 수 있습니다.

+0

listPanel이 BoxLayout을 사용하고 있습니다. 그렇다면 contentPanel에서도 사용해야합니다. –

+1

@Viktor, 중첩 된 패널을 가지고 있으므로 각 레벨의 레이아웃을 조정해야 할 필요가 있습니다. contentPanel 레이아웃은 contentPanel 내부의 항목의 레이아웃 및 선호 크기뿐만 아니라 요소가 될 것입니다. – jzd

3

내가 가지고있는 문제는 listPanel에 더 많은 구성 요소가 추가되면 세로 스크롤 막대가 내 스크롤 패널에 나타나지 않는다는 것입니다.

스크롤 막대에 추가 된 구성 요소의 기본 크기가 스크롤 막대의 크기보다 클 경우 스크롤 막대가 나타납니다. 구성 요소를 동적으로 추가 할 때 스크롤 패널에 변경된 내용이 있음을 알릴 필요가 있습니다. (내가 기억하지 않습니다)는 서브 패널에 패널을 추가되기 때문에, 당신은 스크롤을 재 검증해야 할 수도 있습니다,

panel.add(subPanel); 
panel.revalidate(); 

을 또는 : 그래서 당신은 기본 코드가 있어야한다

panel.add(subPanel); 
scrollPane.revalidate(); 

key는 레이아웃 관리자에게 크기를 다시 계산하도록 지시하는 revalidate()입니다.