본문 바로가기
Java

[Java] Swing을 활용해 간단한 알람 만들기

by teamnova 2023. 12. 23.

안녕하세요 이번 게시글에서는 java swing을 활용해 간단한 알람을 만들겠습니다.

 

유저가 시간을 먼저 지정하고 지정한 시간이 지나면 지정한 시간이 됐었다는 알림 메세지와 함께 비프음이 들리는 알람 기능입니다.

먼저 시연 영상입니다.

 

다음은 전체 코드입니다.

// 필요한 패키지와 클래스를 임포트합니다.
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

// AlarmClock 클래스를 정의합니다. 이 클래스는 메인 윈도우와 알람 기능을 관리합니다.
public class AlarmClock {
    // GUI 컴포넌트들을 선언합니다.
    private final JFrame frame;
    private final JTextField timeField;
    private final JButton setAlarmButton;
    private Timer alarmTimer; // 알람 타이머 기능을 담당할 Timer 객체
    
    // 생성자를 통해 AlarmClock의 기본 UI를 설정합니다.
    public AlarmClock() {
        // 메인 윈도우를 생성합니다.
        frame = new JFrame("알람 시계");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 윈도우를 닫으면 프로그램이 종료되도록 설정합니다.
        frame.setSize(200, 120); // 윈도우의 크기를 설정합니다.
        frame.setLayout(new FlowLayout()); // 레이아웃 매니저를 설정합니다. (컴포넌트들을 순서대로 배치)
        
        // 텍스트 필드를 생성하고 툴팁을 설정합니다.
        timeField = new JTextField(5); // 5칸의 텍스트 필드를 생성합니다.
        timeField.setToolTipText("알람 시간을 초 단위로 입력하세요"); // 텍스트 필드에 마우스를 올리면 나타날 툴팁을 설정합니다.
        
        // 알람 설정 버튼을 생성하고, 이벤트 리스너를 추가합니다.
        setAlarmButton = new JButton("알람 설정");
        setAlarmButton.addActionListener(new ActionListener() { // 버튼 클릭 이벤트에 대한 리스너를 추가합니다.
            public void actionPerformed(ActionEvent e) {
                int time = Integer.parseInt(timeField.getText()); // 텍스트 필드의 값을 정수로 변환합니다.
                setAlarm(time); // 변환된 값을 setAlarm 함수에 전달하여 알람을 설정합니다.
            }
        });
        
        // 윈도우에 텍스트 필드와 버튼을 추가합니다.
        frame.add(timeField);
        frame.add(setAlarmButton);
        frame.setVisible(true); // 윈도우를 화면에 표시합니다.
    }
    
    // setAlarm 메소드는 주어진 초만큼 후에 알람을 울리는 기능을 합니다.
    private void setAlarm(int seconds) {
        if (alarmTimer != null) { // 이전에 설정된 타이머가 있으면 중지합니다.
            alarmTimer.stop();
        }
        alarmTimer = new Timer(seconds * 1000, new ActionListener() { // Timer를 생성하고, 지정된 시간(초 * 1000 밀리초) 후에 실행될 작업을 정의합니다.
            @Override
            public void actionPerformed(ActionEvent e) {
                Toolkit.getDefaultToolkit().beep(); // 시스템 비프음을 재생합니다.
                JOptionPane.showMessageDialog(frame, "알람! 지정한 시간이 되었습니다!", "알람", JOptionPane.WARNING_MESSAGE); // 메시지 다이얼로그를 표시합니다.
            }
        });
        alarmTimer.setRepeats(false); // 타이머가 한 번만 실행되도록 설정합니다.
        alarmTimer.start(); // 타이머를 시작합니다.
        JOptionPane.showMessageDialog(frame, "알람이 " + seconds + "초 후에 설정되었습니다."); // 알람 설정 확인 메시지를 표시합니다.
    }
    
    // 메인 메소드는 프로그램의 진입점입니다.
    public static void main(String[] args) {
        // 이벤트 디스패치 스레드에서 UI를 생성하고 표시하기 위해 SwingUtilities.invokeLater를 사용합니다.
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new AlarmClock(); // 알람 시계 인스턴스 생성 및 실행
            }
        });
    }
}