JScrollPane은 스윙(Swing)에서 제공하는 컴포넌트로 화면에 다 표시되지 않는 내용을 스크롤 기능을 통해 보여줍니다. 화면 크기에 맞게 컴포넌트의 내용을 표시하고 내용이 화면을 초과할 경우 자동으로 수평 및 수직 스크롤바를 추가하여 사용자가 모든 내용을 볼 수 있도록 도와줍니다. 주로 JPanel, JTextArea, JTable, JList와 같은 컴포넌트와 함께 사용되며 공간을 절약하고 사용자가 효율적으로 내용을 확인할 수 있게 합니다.
JScrollPane은 수직 스크롤바(vertical scrollbar) 와 수평 스크롤바(horizontal scrollbar) 두 가지를 제공합니다. 각각의 스크롤바는 언제 표시할 것인지를 설정할 수 있으며 생성자나 메서드를 통해 조절할 수 있습니다.
JScrollPane은 기본적으로 테두리(Border) 를 가지고 있으며 필요에 따라 테두리를 제거하거나 사용자 지정 테두리로 변경할 수 있습니다.
투명한 테두리(여백)를 설정하여 스크롤 내용과 외부 레이아웃 사이에 여유 있는 공간을 만들어줍니다. 이 여백은 실제 테두리 선 없이 비워진 공간이므로 해당 영역을 통해 JScrollPane 뒤쪽의 배경이 자연스럽게 드러납니다.
JScrollPane 자체에는 여백(padding)을 직접 지정할 수 없습니다. JScrollPane은 기본적으로 테두리(border) 설정은 가능하지만 내부의 여백을 설정하는 기능은 제공하지 않습니다. JScrollPane은 스크롤 기능을 제공하는 데 초점을 맞춘 컴포넌트로 스크롤 가능한 영역 안에 다른 컴포넌트를 배치합니다. 따라서 여백을 지정하는 대신 내부 컴포넌트(예 : JPanel, JTextArea)에서 여백을 조정하거나 JScrollPane에 빈 테두리를 설정하여 간접적으로 여백을 추가하는 방식으로 해결할 수 있습니다. JScrollPane의 핵심은 스크롤 기능을 제공하는 것이므로 여백을 직접 지정하기보다는 스크롤 영역을 효율적으로 관리하는 데 집중하고 있습니다.
JScrollPane 내부에는 JViewport라는 공간이 있으며 이곳이 실제로 화면에 보여지는 영역입니다. 우리가 보고 싶은 컴포넌트(JTextArea, JTable 등)는 바로 이 뷰포트에 들어갑니다. 스크롤은 뷰포트 안의 콘텐츠를 움직여 보여주는 방식으로 동작합니다.
JScrollPane은 내부에 여러 구성요소를 포함하고 있습니다. 주요 구성은 다음과 같습니다.
- Viewport (JViewport) : 실제로 스크롤되는 콘텐츠를 포함하는 영역입니다. (예 : JTextArea, JPanel 등)
- Scroll Bars (JScrollBar) : 스크롤을 조작할 수 있는 UI.
- Corner Components : 스크롤 바가 교차하는 지점 등의 UI를 담당.
- ScrollPane 자체 : 이 모든 구성요소를 포함하는 컨테이너.
JScrollPane에서 마우스 휠을 이용한 스크롤 기능을 켜거나 끄는 역할을 합니다. 휠 스크롤을 꺼도 스크롤바 자체는 그대로 유지되며, 스크롤바를 마우스로 직접 조작하는 것은 계속 가능합니다.
휠 스크롤을 비활성화하고 싶을 때는 이 메서드를 사용하여 휠 스크롤을 끌 수 있습니다. 화면에 휠 스크롤 기능이 불필요하거나 다른 방식으로 스크롤을 처리할 경우 유용합니다.
기본적으로 휠 스크롤은 활성화되어 있지만 만약 비활성화된 상태에서 다시 휠 스크롤을 사용하려면 true로 설정하여 활성화할 수 있습니다.
설정값에 따라 마우스 휠 스크롤 기능이 어떻게 동작하는지 비교한 표입니다.
JScrollPane에 배경색이나 배경 이미지를 설정해도 바로 눈에 띄지 않는 경우가 많습니다. 이는 JScrollPane이 내부에 뷰포트(Viewport)를 포함하고 있고 실제 콘텐츠는 이 뷰포트 위에 표시되기 때문입니다. 따라서 배경색이나 이미지를 적용하려면 JScrollPane이 아닌 뷰포트나 내부 컴포넌트(JPanel 등)에 직접 설정해야 합니다.
'JAVA' 카테고리의 다른 글
[JAVA] BasicScrollBarUI를 활용한 JScrollBar 커스터마이징 (39) | 2025.05.01 |
---|---|
[JAVA] Color 설정과 커스터마이징 (82) | 2025.04.12 |
[JAVA] JTextArea 커스텀마이징 1 (104) | 2025.04.04 |