import java.awt.*;
import java.awt.event.*;
import java.util.Calendar;
import javax.swing.JOptionPane;
class CalendarBean { //定义一个日历类
String day[]; //天数数组
int year = 2011, month = 9; //给定一个初始年月
public void setYear(int year) {
this.year = year;
}
public int getYear() {
return year;
}
public void setMonth(int month) {
this.month = month;
}
public int getMonth() {
return month;
}
public String[] getCalendar() { //获得日历
String a[] = new String[42]; //定义一个以字符串数组
Calendar 日历 = Calendar.getInstance();
日历.set(year, month - 1, 1);
int 星期几 = 日历.get(Calendar.DAY_OF_WEEK) - 1;
int day = 0;
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
day = 31;
}
if (month == 4 || month == 6 || month == 9 || month == 11) {
day = 30;
}
if (month == 2) {
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
day = 29;
} else {
day = 28;
}
}
for (int i = 星期几, n = 1; i < 星期几 + day; i++) {
a[i] = String.valueOf(n);
n++;
}
return a;
}
}
class CalendarFrame extends Frame implements ActionListener {
Label labelDay[] = new Label[42]; //用来输出日历的天的数组
Button titleName[] = new Button[7]; //周一到周天的按键
String name[] = { "日", "一", "二", "三", "四", "五", "六" };
TextField text1, text2; //定义输入的年份和月份
Button nextMonth, previousMonth, Enter; //下个月,上个月,确定
Label lab1, lab2, lab3; //几个文本类型的字符串
int year = 2012, month = 9;
CalendarBean calendar; //顶一个量
Label showMessage = new Label("", Label.CENTER); // 定义一个用于显示 当前年月的label 表明,标签上应为中心。
public CalendarFrame() { //窗体类
Panel pCenter = new Panel(); //镶嵌
pCenter.setLayout(new GridLayout(7, 7));
for (int i = 0; i < 7; i++) { //给周日到周六的button添加显示文本
titleName[i] = new Button(name[i]);
pCenter.add(titleName[i]);
}
for (int i = 0; i < 42; i++) {
labelDay[i] = new Label("", Label.CENTER);
pCenter.add(labelDay[i]);
}
calendar = new CalendarBean();
calendar.setYear(year); //设定年
calendar.setMonth(month);
String day[] = calendar.getCalendar(); //设定天
for (int i = 0; i < 42; i++) { //给日历位置循环添加显示日历天
labelDay[i].setText(day[i]);
}
lab1 = new Label("请输入日期"); //调用一个方法 new一个对象
lab2 = new Label("年份");
lab3 = new Label("月份");
Enter = new Button("确定");
text1 = new TextField(10);
text2 = new TextField(5);
nextMonth = new Button("下月");
previousMonth = new Button("上月");
Enter.addActionListener(this); //添加指定的动作侦听器
nextMonth.addActionListener(this);
previousMonth.addActionListener(this);
Panel pNorth = new Panel(), pSouth = new Panel();
pNorth.add(lab1);
pNorth.add(lab2);
pNorth.add(text1);
pNorth.add(lab3);
pNorth.add(text2);
pNorth.add(Enter);
pNorth.add(previousMonth);
pNorth.add(nextMonth);
pSouth.add(showMessage);
showMessage.setText("日历:" + calendar.getYear() + "年" + calendar.getMonth() + "月");
ScrollPane scrollPane = new ScrollPane(); //实现单个子组件的自动水平和/或垂直滚动的容器类
scrollPane.add(pCenter);
add(scrollPane, BorderLayout.CENTER);
add(pNorth, BorderLayout.NORTH);
add(pSouth, BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == nextMonth) { //如果获得的操作时下个月的
month = month + 1;
if (month > 12)
month = 1;
calendar.setMonth(month);
String day[] = calendar.getCalendar();
for (int i = 0; i < 42; i++) {
labelDay[i].setText(day[i]);
}
} else if (e.getSource() == previousMonth) {
month = month - 1;
if (month < 1)
month = 12;
calendar.setMonth(month);
String day[] = calendar.getCalendar();
for (int i = 0; i < 42; i++) {
labelDay[i].setText(day[i]);
}
} else {
String yea = text1.getText();
String mon = text2.getText();
try {
year = Integer.parseInt(yea); //把string转成int类型
month = Integer.parseInt(mon);
if (month > 12 || month < 1 || year < 1) { //错误输入的处理
JOptionPane.showMessageDialog(null, "请输入正确月份或月份");
return;
} else {
calendar.setYear(year);
calendar.setMonth(month);
}
String day[] = calendar.getCalendar();
for (int i = 0; i < 42; i++) {
labelDay[i].setText(day[i]);
}
} catch (NumberFormatException ee) {
JOptionPane.showMessageDialog(null, "请输入正确的年份及月份");
}
}
showMessage.setText("日历:" + calendar.getYear() + "年" + calendar.getMonth() + "月");
}
}
public class CalendarMainClass {
public static void main(String args[]) {
CalendarFrame frame = new CalendarFrame();
frame.setTitle("日历");
frame.setBounds(300, 200, 500, 300);
frame.setVisible(true); //显示窗口
frame.validate(); //使生效
frame.addWindowListener(new java.awt.event.WindowAdapter() { //点击叉号关闭frame程序
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
}
}