JAVA

[JAVA] JScrollPane 커스텀마이징 1

Coding🌱 2025. 4. 22. 15:15
반응형
SMALL
1JScrollPane 기본 사용법

JScrollPane스윙(Swing)에서 제공하는 컴포넌트로 화면에 다 표시되지 않는 내용을 스크롤 기능을 통해 보여줍니다. 화면 크기에 맞게 컴포넌트의 내용을 표시하고 내용이 화면을 초과할 경우 자동으로 수평 및 수직 스크롤바를 추가하여 사용자가 모든 내용을 볼 수 있도록 도와줍니다. 주로 JPanel, JTextArea, JTable, JList와 같은 컴포넌트와 함께 사용되며 공간을 절약하고 사용자가 효율적으로 내용을 확인할 수 있게 합니다.

 
 
 
JAVA
JFrame frame = new JFrame("");
JTextArea textArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(textArea);
frame.add(scrollPane);
2 JScrollPane 스크롤바 설정

JScrollPane수직 스크롤바(vertical scrollbar)수평 스크롤바(horizontal scrollbar) 두 가지를 제공합니다. 각각의 스크롤바는 언제 표시할 것인지를 설정할 수 있으며 생성자나 메서드를 통해 조절할 수 있습니다.

2-1수직 스크롤바
 
 
 
JAVA
/*
 * 항상 수직 스크롤바 표시 : JScrollPane.VERTICAL_SCROLLBAR_ALWAYS
 * 필요할 때만 수직 스크롤바 표시 (기본값) : JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED
 * 수직 스크롤바 표시 안 함 : JScrollPane.VERTICAL_SCROLLBAR_NEVER
 */
 
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
2-2수평 스크롤바
 
 
 
JAVA
/*
 * 항상 수직 스크롤바 표시 : JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS
 * 필요할 때만 수직 스크롤바 표시 (기본값) : JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED
 * 수직 스크롤바 표시 안 함 : JScrollPane.HORIZONTAL_SCROLLBAR_NEVER
 */
 
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
3JScrollPane 테두리 설정

JScrollPane은 기본적으로 테두리(Border) 를 가지고 있으며 필요에 따라 테두리를 제거하거나 사용자 지정 테두리로 변경할 수 있습니다.

3-1 테두리 제거

 
 
 
JAVA
scrollPane.setBorder(null);

 

3-2 투명 테두리로 여백 조절

투명한 테두리(여백)를 설정하여 스크롤 내용과 외부 레이아웃 사이에 여유 있는 공간을 만들어줍니다. 이 여백은 실제 테두리 선 없이 비워진 공간이므로 해당 영역을 통해 JScrollPane 뒤쪽의 배경이 자연스럽게 드러납니다.

 
 
 
JAVA
scrollPane.setBackground(Color.BLACK);
scrollPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
3-3 테두리에 제목 생성

 

 
 
 
JAVA
scrollPane.setBackground(Color.WHITE);
scrollPane.setBorder(BorderFactory.createTitledBorder("Hello, World!"));

 

3-4 단색 테두리 추가

 

 
 
 
JAVA
// 방법 1
scrollPane.setBorder(BorderFactory.createMatteBorder(10, 10, 10, 10, Color.BLACK));

// 방법 2
scrollPane.setBorder(BorderFactory.createLineBorder(Color.BLACK, 10));
4JScrollPane 여백 설정

JScrollPane 자체에는 여백(padding)을 직접 지정할 수 없습니다. JScrollPane은 기본적으로 테두리(border) 설정은 가능하지만 내부의 여백을 설정하는 기능은 제공하지 않습니다. JScrollPane은 스크롤 기능을 제공하는 데 초점을 맞춘 컴포넌트로 스크롤 가능한 영역 안에 다른 컴포넌트를 배치합니다. 따라서 여백을 지정하는 대신 내부 컴포넌트(예 : JPanel, JTextArea)에서 여백을 조정하거나 JScrollPane에 빈 테두리를 설정하여 간접적으로 여백을 추가하는 방식으로 해결할 수 있습니다. JScrollPane의 핵심은 스크롤 기능을 제공하는 것이므로 여백을 직접 지정하기보다는 스크롤 영역을 효율적으로 관리하는 데 집중하고 있습니다.

5JScrollPane 뷰포트 변경하기

 

JScrollPane 내부에는 JViewport라는 공간이 있으며 이곳이 실제로 화면에 보여지는 영역입니다. 우리가 보고 싶은 컴포넌트(JTextArea, JTable 등)는 바로 이 뷰포트에 들어갑니다. 스크롤은 뷰포트 안의 콘텐츠를 움직여 보여주는 방식으로 동작합니다.

 

JScrollPane은 내부에 여러 구성요소를 포함하고 있습니다. 주요 구성은 다음과 같습니다.

  • Viewport (JViewport) : 실제로 스크롤되는 콘텐츠를 포함하는 영역입니다. (예 : JTextArea, JPanel 등)
  • Scroll Bars (JScrollBar) : 스크롤을 조작할 수 있는 UI.
  • Corner Components : 스크롤 바가 교차하는 지점 등의 UI를 담당.
  • ScrollPane 자체 : 이 모든 구성요소를 포함하는 컨테이너.
 
 
 
JAVA
scrollPane.setViewportView(table);
방식 설명 장점 사용 시점
JScrollPane scrollPane = new JScrollPane(table); JTable을 바로 JScrollPane에 추가하면서 생성 간단하고 직관적 컴포넌트를 바로 감쌀 때 사용
scrollPane.setViewportView(table); 기존에 생성된 JScrollPane에 나중에 table을 추가 동적으로 컴포넌트를 설정 가능 뷰포트 설정을 나중에 할 때 사용
6JScrollPane 휠 스크롤 제어

JScrollPane에서 마우스 휠을 이용한 스크롤 기능을 켜거나 끄는 역할을 합니다. 휠 스크롤을 꺼도 스크롤바 자체는 그대로 유지되며, 스크롤바를 마우스로 직접 조작하는 것은 계속 가능합니다.

6-1 휠 스크롤 비활성화하기

휠 스크롤을 비활성화하고 싶을 때는 이 메서드를 사용하여 휠 스크롤을 끌 수 있습니다. 화면에 휠 스크롤 기능이 불필요하거나 다른 방식으로 스크롤을 처리할 경우 유용합니다.

 
 
 
JAVA
scrollPane.setWheelScrollingEnabled(false);
⚠️주의 
JScrollPane.setWheelScrollingEnabled(false)를 설정해도 내부 컴포넌트가 마우스 휠 이벤트를 자체적으로 처리하는 경우에는 스크롤이 계속 작동합니다.
(예: JTextArea, JTable 등은 내부적으로 MouseWheelListener를 구현하고 있기 때문입니다.)
6-2 휠 스크롤 활성화하기

기본적으로 휠 스크롤은 활성화되어 있지만 만약 비활성화된 상태에서 다시 휠 스크롤을 사용하려면 true로 설정하여 활성화할 수 있습니다.

 
 
 
JAVA
scrollPane.setWheelScrollingEnabled(true);
6-3 설정에 따른 동작 방식

설정값에 따라 마우스 휠 스크롤 기능이 어떻게 동작하는지 비교한 표입니다.

설정 마우스 휠 스크롤 스크롤바 표시 수동 드래그
ture O O O
flase X O O
7JScrollPane 배경 설정

JScrollPane에 배경색이나 배경 이미지설정해도 바로 눈에 띄지 않는 경우가 많습니다. 이는 JScrollPane이 내부에 뷰포트(Viewport)를 포함하고 있고 실제 콘텐츠는 이 뷰포트 위에 표시되기 때문입니다. 따라서 배경색이나 이미지를 적용하려면 JScrollPane이 아닌 뷰포트내부 컴포넌트(JPanel 등)에 직접 설정해야 합니다.

💡 Tip
✔ 배경색 설정
  • JScrollPane에 배경색을 설정해도 잘 보이지 않는 경우가 있습니다.
  • 실제 콘텐츠는 Viewport에 표시되므로, 배경색도 여기에 설정해야 합니다.
  • scrollPane.getViewport().setBackground(Color.원하는색);setOpaque(true) 설정이 필요합니다.
✔ 배경 이미지 설정
  • JScrollPane 자체에는 배경 이미지를 설정할 수 없습니다.
  • 이미지를 배경으로 사용하려면, 이미지가 그려진 JPanel을 생성하여 JScrollPane 안에 넣는 방식으로 구현해야 합니다.
반응형
LIST