[Java/Swing] 윤년 계산기 구현

2023. 2. 18. 20:31·Java/Swing (GUI)
728x90
728x90

  - 4의 배수인 해는 윤년임

  - 4의 배수이면서 100의 배수인 해는 윤년이 아님

      → 4의 배수이면서 100의 배수가 아니어야 윤년임

  - 100의 배수이면서 400의 배수인 해는 윤년임

 

코드

#  윤년 계산 기능 파일

public class LeapYear {

    // 메서드
    public boolean isLeapYear(int year) {
        // 아래 if 문의 조건에 걸리지 않는다면 false로 유지됨
        boolean result = false;
        if (year % 4 == 0) {
            if (year % 100 != 0) { 
                result = true;
            // year % 4 == 0이고 year % 100 == 0인 값은 else로 빠짐
            } else {
                if (year % 400 == 0) {
                    result = true;
                }
            }
        } // end of if
        System.out.println(year + "년은 윤년인가? : " + result);
        return result;
    } 

    // 코드 테스트
    public static void main(String[] args) {
        LeapYear leapYear = new LeapYear();
        int x = 2000;
        leapYear.isLeapYear(x);
    } // end of main

} // end of class

#  GUI 구현 파일

public class LeapYearFrame extends JFrame implements ActionListener, KeyListener {

    private JPanel panel1;
    private JLabel label; // 항목이름
    private JTextField textField; // 입력
    private JButton button; // 실행 버튼 
    private JPanel panel2;
    private boolean isStart; // 이벤트 실행 여부
    private LeapYear leapYear; // 윤년 계산 클래스

    public LeapYearFrame() {
        initData();
        setInitLayout();
        addEventListener();
    }

    private void initData() {
        setTitle("윤년 계산기");
        setSize(300, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false); // 창 크기 조정 불가

        panel1 = new JPanel();
        panel1.setBackground(Color.cyan);
        panel2 = new JPanel();

        label= new JLabel("연도 입력 ");
        textField = new JTextField("", 8);
        button = new JButton("실행");
    }

    private void setInitLayout() {
        add(panel1, BorderLayout.NORTH);
        add(panel2, BorderLayout.CENTER);

        panel1.add(label);
        panel1.add(textField);
        panel1.add(button);

        setVisible(true);	
    }

    private void addEventListener() {
        // 버튼을 누르거나 엔터를 누르면 실행
        button.addActionListener(this);
        textField.addKeyListener(this);
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        // 폰트 설정
        Font f = new Font("맑은 고딕", Font.BOLD, 18);
        g.setFont(f);
        // 실행 이전
        if (isStart == false) {
            g.drawString("공백 없이 숫자를 입력해주세요.", 20, 180);
            return;  // if 문에 걸리면 밑 코드 실행 X
        }
        // 기능 클래스 인스턴스화
        LeapYear leapYear = new LeapYear();

        // 입력 값이 잘못되었을 때를 대비한 예외 처리
        try {
            // 입력한 연도를 가져와서 정수로 변환
            int targetYear = Integer.parseInt(textField.getText());
            // 메서드를 사용해서 결과 boolean 값을 받아옴
            boolean result = leapYear.isLeapYear(targetYear);

            if (result == true) {
                g.drawString(targetYear + "년은 윤년입니다.", 20, 180);
            } else {
                g.drawString(targetYear + "년은 윤년이 아닙니다.", 20, 180);			
            }
            // 텍스트 필드에 입력한 값을 초기화함
            textField.setText("");
            
        } catch (Exception e) {
            // 숫자가 아닌 문자를 입력해서 오류가 발생한 경우
            g.drawString("공백 없이 숫자를 입력해주세요.", 20, 180);
            // 텍스트 필드에 입력한 값을 초기화함
            textField.setText("");
        }
    } // end of paint

    @Override
    public void actionPerformed(ActionEvent e) {
        // 버튼을 누르면 실행되도록 하기
        isStart = true;
        repaint();
    }

    @Override
    public void keyPressed(KeyEvent e) {
        // 엔터를 눌렀을 때 실행되도록 하기 (엔터 키의 키 코드 = 10)
        if (e.getKeyCode() == 10) {
            isStart = true;
            repaint();
        }		
    }

    @Override
    public void keyTyped(KeyEvent e) {
    }

    @Override
    public void keyReleased(KeyEvent e) {
    }
    
    // 코드 실행
    public static void main(String[] args) {
        new LeapYearFrame();
    } // end of main
    
} // end of class

 

실행

 

320x100
반응형
저작자표시 비영리 변경금지

'Java > Swing (GUI)' 카테고리의 다른 글

[Java/Swing] 로또 게임 구현  (0) 2023.02.19
[Java/Swing] KeyListener - 이미지 움직이기  (0) 2023.02.18
[Java/Swing] MouseListener - 컴포넌트 이동시키기  (0) 2023.02.18
[Java/Swing] ActionListener - 배경 색 변경하기  (1) 2023.02.18
[Java/Swing] 메서드 및 함수 모음  (1) 2023.02.17
'Java/Swing (GUI)' 카테고리의 다른 글
  • [Java/Swing] 로또 게임 구현
  • [Java/Swing] KeyListener - 이미지 움직이기
  • [Java/Swing] MouseListener - 컴포넌트 이동시키기
  • [Java/Swing] ActionListener - 배경 색 변경하기
스응
스응
    반응형
    250x250
  • 스응
    이서영의 개발 블로그
    스응
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (383)
      • Java (134)
        • Base (54)
        • Spring Boot (37)
        • JSP (16)
        • Swing (GUI) (20)
        • Design Pattern (7)
      • C# (13)
      • PHP (18)
      • SQL (27)
      • Vue.js (10)
      • Tailwind CSS (4)
      • TypeScript (7)
      • HTML & CSS (27)
      • JavaScript (26)
      • jQuery (10)
      • Android (3)
      • - - - - - - - - - - - - - - (0)
      • Hotkeys (5)
      • CS (30)
      • etc. (13)
      • Error Note (14)
      • Team Project (24)
        • Airlines Web Project (12)
        • University Web Project (6)
        • Strikers 1945 GUI Project (6)
      • My Project (18)
        • Library Web Project (8)
        • Pet Shopping Mall GUI Project (10)
  • 블로그 메뉴

    • Home
    • Write
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    Android
    jsp
    jQuery
    HTML
    php
    typeScript
    Codeigniter
    개발일지
    면접
    티스토리챌린지
    C#
    SpringBoot
    js
    vuejs
    오블완
    errorNote
    zapier
    git
    SQL
    http
    Hotkeys
    Swing
    SEO
    cs
    tailwindcss
    CSS
    java
    Wordpress
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
스응
[Java/Swing] 윤년 계산기 구현
상단으로

티스토리툴바