Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- Position
- HTML
- rnn
- FFT
- Codility
- 퍼셉트론
- 푸리에 변환
- html 기초
- Database
- 반응형 웹 프로젝트
- ObjectOutputStream
- 반응형웹
- 예제
- oracle
- CSS
- g검정
- 미디어쿼리
- GridLayout
- BorderLayout
- 사전학습
- FlowLayout
- FileWriter
- 메서드
- iframe 태그
- css 기초
- inline
- 파이썬
- java
- html 프로젝트
- 상속
Archives
- Today
- Total
도라에몽주머니
[Java/Eclipse] Java 54일차 본문

Calender
: 날짜와 시간을 처리하는 추상 클래스
예제
: 아래와 같은 만년달력을 만드는 코드를 작성하시오.

// Exam28.java
package calendar;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Exam28 extends JFrame implements ActionListener{
Container container = this.getContentPane();
// North
JPanel panelNorth = new JPanel();
JButton buttonBefore = new JButton("Before");
JButton buttonAfter = new JButton("After");
JLabel label = new JLabel("Date");
// Center
JPanel panelCenter = new JPanel();
JButton[] buttons = new JButton[49];
String[] dayNames = {"일","월","화","수","목","금","토"};
// 날짜 관리 클래스
HCalendar hCalendar = new HCalendar(buttons);
public Exam28() {
// frame 기본 설정
this.setTitle("만년달력");
this.setSize(550, 400);
this.setLocation(500, 300);
this.setResizable(false); // 크기 변경 금지
init();
start();
this.setVisible(true);
}
// 화면구성
private void init() {
/* frame 구성 */
container.setLayout(new BorderLayout());
container.add("North", panelNorth);
container.add("Center", panelCenter);
/* panelNorth 구성 */
panelNorth.setLayout(new FlowLayout());
panelNorth.add(buttonBefore);
panelNorth.add(label);
panelNorth.add(buttonAfter);
// 버튼과 라벨의 글자 설정
Font font1 = new Font("Sans Serif", Font.BOLD, 20);
buttonAfter.setFont(font1);
buttonBefore.setFont(font1);
label.setFont(font1);
// 라벨에 년월 출력
label.setText(hCalendar.getCalText());
/* panelCenter 구성 */
panelCenter.setLayout(new GridLayout(7, 7, 5, 5));
Font font2 = new Font("Serif", Font.BOLD, 24);
for(int i=0; i<buttons.length; i++) {
buttons[i] = new JButton();
panelCenter.add(buttons[i]);
// 버튼 폰트 설정
buttons[i].setFont(font2);
buttons[i].setBackground(Color.WHITE);
// buttons[0]~buttons[6]에 일~토 글씨 넣기
if(i<7) {
buttons[i].setText(dayNames[i]);
}
// 버튼색 설정, 일요일 : 빨간색, 토요일 : 파란색
if(i%7 == 0) { // 일요일 버튼
buttons[i].setForeground(Color.RED);
}
if(i%7 == 6) { // 토요일 버튼
buttons[i].setForeground(Color.BLUE);
}
}
// 날짜 출력
hCalendar.calSet();
}
// 이벤트 설정
private void start() {
// x버튼 이벤트 처리
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
buttonAfter.addActionListener(this);
buttonBefore.addActionListener(this);
}
// 이벤트 처리
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == buttonBefore) {
hCalendar.allInit(-1);
// label에 날짜 출력
label.setText(hCalendar.getCalText());
} else if(e.getSource() == buttonAfter) {
hCalendar.allInit(1);
// label에 날짜 출력
label.setText(hCalendar.getCalText());
}
}
public static void main(String[] args) {
new Exam28();
}
}
// HCalendar.java
package calendar;
import java.util.Calendar;
import javax.swing.JButton;
// 날짜 관리
// => 버튼에 날짜 출력
// => 년월을 문자열로 만들어서 리턴
public class HCalendar {
JButton[] buttons;
Calendar calendar = Calendar.getInstance();
int year, month;
public HCalendar(JButton[] buttons) {
this.buttons = buttons;
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH) + 1;
}
// 년월 문자열 리턴
public String getCalText() {
return year + "년 " + month + "월";
}
// 버튼에 날짜 출력
public void calSet() {
// 그달의 1일로 날짜 수정
calendar.set(year, month - 1, 1);
// 요일수 : 그날이 일주일 기준으로 며칠째인지 나타냄
// => 배열이 0부터 이름이 시작되기 때문에
// => "요일수 - 1"로 사용
int firstDay = calendar.get(Calendar.DAY_OF_WEEK) - 1;
// 그달의 총일수 구하기
int totalDays = calendar.getActualMaximum(Calendar.DATE);
for(int i=1; i<=totalDays; i++) {
// buttons[0]~buttons[6] : 일~토
// 그달의 1일은 buttons[6 + (요일수 - 1) + i]
buttons[6 + firstDay + i].setText(String.valueOf(i));
}
}
// 달력을 새로운 년월로 새로 그리기
public void allInit(int gap) {
// 버튼의 날짜 지우기
for(int i=7; i<buttons.length; i++) {
buttons[i].setText("");
}
// 년, 월 변수값 수정
month += gap;
if(month <= 0) {
year--;
month = 12;
} else if(month >= 13) {
year++;
month = 1;
}
// 버튼에 년월 출력
calSet();
}
}'Study > Java' 카테고리의 다른 글
| [Java/Eclipse] Java 56일차 (0) | 2022.12.02 |
|---|---|
| [Java/Eclipse] Java 55일차 (0) | 2022.12.01 |
| [Java/Eclipse] Java 53일차 (0) | 2022.12.01 |
| [Java/Eclipse] Java 52일차 (0) | 2022.11.28 |
| [Java/Eclipse] Java 51일차 (0) | 2022.11.25 |