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

Java JSlider 값 변경 감지하기: ChangeListener와 paint() 메서드 활용법

JSlider란 무엇인가?

JSliderJComponent 클래스의 하위 클래스로, 스크롤 바와 유사하게 동작하는 Java Swing 컴포넌트입니다. 사용자가 지정된 정수 범위 내에서 숫자 값을 선택할 수 있도록 해주며, 슬라이더에는 값 범위 위를 미끄러지듯 이동하며 원하는 값을 선택할 수 있는 노브(knob)가 포함되어 있습니다. 노브의 위치가 변경될 때마다 ChangeListener 인터페이스를 통해 이벤트가 발생합니다.

슬라이더를 수평 방향으로 이동할 때 값 변경을 실시간으로 감지하려면 ChangeListener를 등록하고, Graphics2D 클래스를 활용해 paint() 메서드를 오버라이드하여 화면에 변경된 값을 그려주면 됩니다.

예제 코드

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

public class ValueChangeJSliderTest extends JFrame {
    private JSlider slider;

    public ValueChangeJSliderTest() {
        setTitle("ValueChangeJSlider Test");
        slider = new JSlider(JSlider.HORIZONTAL, 0, 20, 1);

        // 값이 변경될 때마다 화면을 다시 그리도록 리스너 등록
        slider.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent ce) {
                repaint();
            }
        });

        setLayout(new BorderLayout());
        slider.setBackground(Color.white);
        slider.setMajorTickSpacing(1);
        slider.setPaintTicks(true);
        slider.setPaintLabels(true);

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

    // 값이 변경될 때마다 호출되어 새로운 값을 화면에 표시
    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.setFont(new Font("Serif", Font.ITALIC, 25));
        g2d.drawString("" + slider.getValue(), 200, 130);
    }

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

코드 핵심 포인트

  • new JSlider(JSlider.HORIZONTAL, 0, 20, 1): 최소값 0, 최대값 20, 초기값 1을 가지는 수평 슬라이더를 생성합니다.
  • addChangeListener(): 슬라이더에 ChangeListener를 등록하여 노브가 움직일 때마다 stateChanged() 메서드가 호출됩니다.
  • repaint(): 값이 변경될 때마다 프레임을 다시 그리도록 요청합니다.
  • paint() 오버라이드: Graphics2D 객체로 캐스팅한 후 drawString() 메서드를 사용해 현재 슬라이더 값을 화면에 출력합니다.
  • setMajorTickSpacing(), setPaintTicks(), setPaintLabels(): 눈금 간격 설정과 눈금·레이블 표시 여부를 지정하여 슬라이더의 가독성을 높입니다.

실행 결과

Java JSlider 값 변경 감지하기: ChangeListener와 paint() 메서드 활용법

프로그램을 실행한 후 슬라이더의 노브를 좌우로 움직이면, ChangeListener가 값 변경을 감지하여 paint() 메서드를 통해 현재 선택된 값이 화면 중앙에 실시간으로 표시되는 것을 확인할 수 있습니다.