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 |