2012-05-30 5 views
2

제 응용 프로그램에는이 그림과 비슷한 두 개의 스윙 구성 요소가 있습니다. 문제는 주황색 구성 요소에는 세로 스크롤 막대가 필요하지만 구성 요소의 오른쪽 모서리가 정확히 정렬되도록 (그리고 너비가 사용자가 응용 프로그램을 더 넓게 또는 좁게 만들 때 달라질 수 있음) 필요합니다. 격자 레이아웃과 같은 것을 사용하면 스크롤바가 공간을 차지하고 스크롤 막대가 빨간색 구성 요소의 오른쪽 가장자리와 정렬됩니다.다른 구성 요소에 jscrollbar를 첨부하십시오.

enter image description here

나는 내가 스크롤 구성 요소를 사용하고 따로을 추가하고 오렌지 구성 요소를 제어하는 ​​데 사용해야 할 수도 있습니다 생각하고 있어요. 스크롤 막대를 다른 컴포넌트에 연결하는 방법이 있습니까? scrollpane을 사용하지 않으면 어려울 것이라고 생각합니다. 다른 접근 방법에 대한 제안도 있습니다.

답변

2

제안한 접근 방식을 구현하는 것이 너무 어렵지 않아야합니다. 오렌지색 구성 요소를 JScrollPane에 랩핑하지만 두 스크롤바를 숨기도록 스크롤 창을 구성하십시오. 그런 다음 스크롤 창에서 수직 스크롤 막대의 스크롤 모델을 독립 실행 형 스크롤 막대에서 스크롤 모델로 설정합니다. 스크롤 창 스크롤 막대는 숨겨져 있지만 모델이 연결되어 있으면 스크롤됩니다. 일부 코드는 my answer in this question을 참조하십시오.이 코드는 다른 애플리케이션이지만 비슷한 원리입니다.

또는 수직 스크롤 막대가있는 JScrollPane을 사용하고 빨간색 구성 요소 옆에 간격 구성 요소를 추가하여 정렬 상태를 유지할 수 있습니다. 두 개의 열이있는 GridBagLayout을 사용할 수 있다고 생각합니다. 첫 번째 행에는 빨간색 구성 요소와 스페이서가 있고 두 번째 행에는 두 열에 걸쳐있는 주황색 구성 요소가있는 스크롤 창이 있습니다. 그런 다음 JScrollPane에서 스크롤 막대 구성 요소의 너비를 가져와 스페이서의 기본 너비를 동일한 값으로 설정하면됩니다. 이 전략의 단점은 스크롤 막대 폭이 변경되면 (예 : UI 변경으로 인해) 스페이서 크기를 업데이트하는 것을 어려울 수 있다는 것입니다.

+0

첫 번째 접근 방식은 효과가있는 것 같습니다. 감사합니다. –