Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java Swing의 JViewport 클래스 완벽 가이드: 핵심 개념과 활용 예제

JViewport란 무엇인가?

JViewport 클래스는 Java Swing에서 기본적인 스크롤 모델을 정의하는 핵심 컴포넌트입니다. 이 클래스는 논리적 스크롤(logical scrolling)픽셀 기반 스크롤(pixel-based scrolling)을 모두 지원하도록 설계되어 있어, 다양한 종류의 콘텐츠를 유연하게 표시할 수 있습니다.

JViewport의 동작 방식은 다음과 같습니다:

  • 뷰포트의 자식 컴포넌트인 뷰(view)JViewport.setViewPosition() 메서드를 호출하여 스크롤됩니다.
  • JViewport 클래스는 논리적 스크롤을 지원합니다. 논리적 스크롤이란 뷰의 좌표가 픽셀이 아닌 다른 단위(예: 행, 열, 문자 등)로 표현되는 스크롤 방식을 의미합니다.

논리적 스크롤 지원 방식

논리적 스크롤을 지원하기 위해 JViewport는 뷰포트와 뷰의 기하학적 구조(geometry)를 정의할 수 있는 소수의 메서드들을 제공합니다. 기본적으로 이러한 메서드들은 뷰포트와 뷰의 픽셀 크기를 그대로 반환하지만, 필요에 따라 이를 재정의하여 논리적 좌표계를 구현할 수 있습니다.

JViewport 활용 예제 코드

아래 예제는 JLabel에 담긴 이미지를 JViewport로 감싸고, 뷰포트의 크기와 뷰 위치를 설정하여 화면에 출력하는 간단한 프로그램입니다.

import java.awt.*;
import javax.swing.*;

public class JViewportTest extends JFrame {
    public JViewportTest() {
        setTitle("JViewport Test");
        setLayout(new FlowLayout());
        JLabel label = new JLabel(new ImageIcon("C:/Users/User/Desktop/Java Answers/logo.jpg"));
        JViewport viewport = new JViewport();
        viewport.setView(label);
        viewport.setExtentSize(new Dimension(350, 350));
        viewport.setViewPosition(new Point(50, 25));
        viewport.setPreferredSize(new Dimension(350, 275));
        add(viewport);
        setSize(400, 300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        new JViewportTest();
    }
}

코드 설명

  • setView(label): 뷰포트에 표시할 자식 컴포넌트(뷰)를 설정합니다.
  • setExtentSize(): 뷰포트에 보이는 영역의 크기를 지정합니다.
  • setViewPosition(): 뷰의 어느 부분부터 화면에 표시할지 좌표를 지정하여 스크롤 효과를 만듭니다.
  • setPreferredSize(): 뷰포트 자체의 선호 크기를 설정합니다.

실행 결과

위 코드를 실행하면 지정된 이미지가 뷰포트 영역 안에서 설정된 좌표(50, 25)만큼 이동된 상태로 표시됩니다. 이처럼 JViewport는 JScrollPane 등과 함께 사용되어 대용량 이미지나 긴 문서를 효율적으로 탐색할 수 있는 환경을 제공합니다.