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

Java Cursor 클래스 완벽 정리: 개념, 커서 종류, 주요 메서드와 실전 예제

Java Cursor 클래스란 무엇인가?

Cursor(커서)는 Java AWT 패키지에 포함된 Object 클래스의 하위 클래스로, 화면 위에 나타나는 포인터 또는 표시자(indicator)를 의미합니다. 커서는 사용자가 마우스를 통해 시스템과 상호작용할 때 입력 위치를 선택하고 시각적으로 안내하는 역할을 합니다.

Java 애플리케이션에서 커서 모양을 변경하면 사용자 경험(UX)을 크게 향상시킬 수 있습니다. 예를 들어, 클릭 가능한 요소 위에서는 손 모양 커서를, 처리 중에는 대기 커서를 표시하여 현재 상태를 직관적으로 전달할 수 있습니다.

Cursor 클래스에서 제공하는 커서 종류

Cursor 클래스는 다음과 같이 미리 정의된(predefined) 다양한 커서 타입 상수를 제공합니다.

  • DEFAULT_CURSOR – 기본 화살표 모양 커서
  • CROSSHAIR_CURSOR – 십자가(+ ) 모양 커서
  • HAND_CURSOR – 손바닥 모양 커서 (링크나 클릭 가능 요소에 주로 사용)
  • TEXT_CURSOR – 텍스트 입력 영역에서 사용되는 I 빔(I-beam) 모양 커서
  • WAIT_CURSOR – 작업 처리 중임을 알리는 모래시계 또는 대기 모양 커서

그 외에도 MOVE_CURSOR, RESIZE_CURSOR, N_RESIZE_CURSOR, E_RESIZE_CURSOR 등 방향별 리사이즈 커서와 CUSTOM_CURSOR를 통해 사용자 지정 이미지 커서도 만들 수 있습니다.

Cursor 클래스의 주요 메서드

메서드설명
getDefaultCursor()시스템의 기본 커서 객체를 반환합니다.
getName()현재 커서의 이름을 문자열로 반환합니다.
getPredefinedCursor(int type)지정된 타입 상수에 해당하는 미리 정의된 커서 객체를 반환합니다.
getSystemCustomCursor(String name)시스템에 등록된 사용자 지정 커서를 이름으로 가져옵니다.
getType()현재 커서의 타입 값을 정수(int) 형태로 반환합니다.

실전 예제: JFrame에서 손 모양 커서 설정하기

아래 예제는 Swing의 JFrame을 생성하고, 프레임 전체에 HAND_CURSOR를 적용하는 간단한 코드입니다.

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

public class CursorTest extends JFrame {
    public CursorTest() {
        setTitle("Cursor Test");
        // 손 모양(HAND) 커서 생성 및 적용
        Cursor cursor = new Cursor(Cursor.HAND_CURSOR);
        setCursor(cursor);
        setSize(375, 250);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }

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

실행 결과

코드를 실행하면 아래 그림과 같이 마우스 포인터가 일반 화살표 대신 손 모양 커서로 변경된 것을 확인할 수 있습니다. 프레임 내부 어디에 마우스를 올려도 동일하게 적용됩니다.

Java Cursor 클래스 완벽 정리: 개념, 커서 종류, 주요 메서드와 실전 예제

마무리

Cursor 클래스는 GUI 애플리케이션에서 사용자에게 시각적 피드백을 제공하는 필수적인 도구입니다. 버튼, 링크, 로딩 화면 등 상황에 맞는 커서를 적절히 활용하면 인터페이스의 직관성과 완성도를 한층 높일 수 있습니다. 필요하다면 Toolkit 클래스의 createCustomCursor() 메서드를 사용해 자신만의 이미지 커서를 정의하는 것도 가능합니다.