2014-03-18 2 views
0

나는 JScrollPanel 내에 JPanel을 가지며 전체 프로그램이 컴파일되어 실행될 때 JPanelJScrollPanel (및 다른 구성 요소도 포함)이 포함 된 GUI가 표시됩니다. 사용자가 JPanel의 가장자리 (예 : , 픽셀, 하단 또는 왼쪽 가장자리 근처)에 무엇인가를 그릴 때마다 gui는 JPanel의 크기를 자동으로 조정해야합니다. 즉 JPanel의 크기를 늘려야합니다. 마우스 이벤트 리스너 (MouseDragged, MouseClicked, MousePressed; 그림 사용)를 사용했으며이 청취자 내에서 JPanel의 새 증가 크기를 설정했습니다. 따라서 가장자리에 무언가가 그려지면 JPanel의 크기를 늘려야합니다. (증가량이 많은 경우 JScrollPane 안에 있으므로 스크롤 막대가 나타납니다). 그러나 크기 조정은 일어나지 않습니다.JPanel의 동적 크기 조정

+0

더 나은 도움을 받으려면 [MCTaRE] (http://stackoverflow.com/help/mcve) (최소 완성도 및 판독 가능 예)를 게시하십시오. –

답변

1

스크롤 막대의 뷰포트에 추가 된 구성 요소의 기본 크기가 스크롤 창의 크기보다 클 경우 자동으로 스크롤 막대가 나타납니다. 따라서 바람직한 크기를 동적으로 다시 계산하려면 JPanel의 getPreferrredSize() 메서드를 재정의해야합니다.

기본 크기 계산은 고려해야합니다

  1. 모든 구성 요소의 크기는 패널에 그려진된다. 그래서 아마 모든 구성 요소를 추적하기 위해 ArayList를 사용할 것입니다. 그런 다음 목록을 반복하면 모든 구성 요소의 최대 너비/높이 위치가 결정됩니다.

  2. 마우스를 끌 때 마우스 위치. 이 값이 위 계산의 너비/높이보다 큰 경우이 값을 사용해야합니다. 구성 요소의 레이아웃이 완료되었는지 확인하기 위해 모든 mouseDragged 이벤트에 대해 revalidate()을 호출해야합니다.