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

Java Swing에서 JLabel을 활용해 움직이는 텍스트 구현하기

JLabelJComponent 클래스의 하위 클래스로, GUI 화면에 텍스트 안내문이나 정보를 표시하는 데 사용되는 컴포넌트입니다. JLabel은 한 줄의 읽기 전용 텍스트, 이미지, 또는 텍스트와 이미지를 함께 표시할 수 있습니다. 또한 JLabel은 PropertyChangeListener 인터페이스를 명시적으로 등록하여 속성 변화를 감지할 수도 있습니다.

JLabel에서 움직이는 텍스트(marquee 효과)를 구현하려면 Timer 클래스를 활용하는 것이 가장 일반적입니다. Timer는 지정한 속도(밀리초 단위)와 이벤트를 처리할 리스너(this)를 인자로 받아, 일정한 간격으로 작업을 반복 실행합니다.

동작 원리

핵심 아이디어는 간단합니다. 타이머가 주기적으로 실행될 때마다 라벨의 현재 텍스트에서 첫 글자를 잘라내어 문자열 끝으로 옮기면, 마치 텍스트가 왼쪽으로 흐르는 것처럼 보이게 됩니다.

예제 코드

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;

public class MovingTextLabel extends JFrame implements ActionListener {
    private JLabel label;

    public MovingTextLabel() {
        setTitle("MovingTextLabel");
        label = new JLabel(" Welcome to Tutorials Point ");
        label.setFont(new Font("Arial", 0, 25));
        add(label, BorderLayout.CENTER);

        Timer t = new Timer(400, this); // 400ms 간격으로 타이머 설정
        t.start();

        setSize(400, 300);
        setVisible(true);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void actionPerformed(ActionEvent e) {
        String oldText = label.getText();
        String newText = oldText.substring(1) + oldText.substring(0, 1);
        label.setText(newText);
    }

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

코드 설명

  • Timer t = new Timer(400, this); — 400밀리초마다 actionPerformed() 메서드를 호출하는 타이머를 생성합니다. 숫자를 줄이면 텍스트가 더 빠르게 움직입니다.
  • actionPerformed() — 현재 텍스트의 첫 번째 문자를 추출하여 문자열 맨 뒤에 붙임으로써 텍스트를 한 칸씩 회전시킵니다.
  • label.setText(newText); — 변경된 텍스트를 라벨에 다시 설정하여 화면을 갱신합니다.

실행 결과

프로그램을 실행하면 윈도우 중앙에서 "Welcome to Tutorials Point"라는 텍스트가 0.4초 간격으로 한 글자씩 밀려나며 끊임없이 흐르는 애니메이션 효과를 확인할 수 있습니다. 이 기법은 전광판처럼 공지사항이나 알림 메시지를 표시하는 UI를 만들 때 유용하게 활용할 수 있습니다.