import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.SimpleDateFormat;
import java.util.*;
public class CalenderTrain extends JFrame implements ActionListener
{
JComboBox Month = new JComboBox(); // 月份下拉列表框
JComboBox Year = new JComboBox(); // 年份下拉列表框
JLabel Year_l = new JLabel("年份:"); // 定义标签
JLabel Month_l = new JLabel("月份:"); // 定义标签
JButton[] button_day = new JButton[49]; //
定义一个数组用来存放日期
JButton button_jump = new JButton("日期跳转"); // 现实选择日期
JButton button_today = new JButton("现在日期"); //
显示今天日期按钮
boolean bool = false;
String year_str = null; // 存放年份
String month_str = null; // 存放月份
JPanel pane_ym = new JPanel(); // 放置下拉列表框和控制按钮面板
JPanel pane_day = new JPanel(); // 放置日期面板
JPanel pane_parent = new JPanel(); // 放置以上两个面板
//
定义方法绘制面板
Calendar cal; // 日历对象
Date
now_date;// 当前 日期
int
now_year;// 当前年份值
int
now_month; // 当前月份值(当前月份-1)
public CalenderTrain() {
super("JAVA日历程序"); // 设定面板标题
// ---以下几行使得关闭面板时退出程序
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
addWindowListener(new WindowAdapter() {
public void windowClose(WindowEvent e) {
System.exit(0);
}
});
setResizable(false); // 面板的大小不能变化
// 设定年月
cal = Calendar.getInstance();
now_year = cal.get(Calendar.YEAR); // 获取年份值
now_month = cal.get(Calendar.MONTH); //
获取月份值(当前月份-1)
for (int i = now_year - 10; i <= now_year + 20; i++)
{
Year.addItem(i + "");
}
for (int i = 1; i < 13; i++) {
Month.addItem(i + "");
}
Year.setSelectedIndex(10); // 设定年份下拉列表为当前年份
pane_ym.add(Year_l); // 添加年份标签
pane_ym.add(Year); // 添加年份下拉列表框
Month.setSelectedIndex(now_month); // 设定月份下拉列表为当前月份
pane_ym.add(Month_l); // 添加月份标签
pane_ym.add(Month); // 添加月份下拉列表框
pane_ym.add(button_jump); // 添加跳转按钮
pane_ym.add(button_today); // 添加“现在日期”按钮
button_jump.addActionListener(this); // 跳转按钮添加 监听事件
button_today.addActionListener(this); //
“现在日期”按钮添加监听事件
// 年月设定结束
// 初始化日期按钮并绘制
pane_day.setLayout(new GridLayout(7, 7));
for (int i = 0; i < 49; i++) {
button_day[i] = new JButton(" ");
pane_day.add(button_day[i]);
}
String week[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"
};
// --将星期添加到前7个按钮中
for (int i = 0; i < 7; i++) {
button_day[i].setText(week[i]);
}
pane_parent.setLayout(new BorderLayout()); //
设定布局管理器
pane_parent.add(pane_day, BorderLayout.SOUTH);
pane_parent.add(pane_ym, BorderLayout.NORTH);
setContentPane(pane_parent);
pack();
this.setVisible(true);
this.setDay(); // 调用setDay()方法
}
//
SET DAY 方法,显示日期
void
setDay() {
if (bool) {
year_str = Integer.toString(now_year);
month_str = Integer.toString(now_month + 1);
} else {
year_str = Year.getSelectedItem().toString();
month_str = Month.getSelectedItem().toString();
}
int year_sel = Integer.parseInt(year_str); // 获得年份值
int month_sel = Integer.parseInt(month_str);
Calendar dt = Calendar.getInstance(TimeZone.getDefault());//
获取当前时区的一个日历对象
dt.clear();// 将日历中信息清空
dt.set(year_sel, month_sel-1, 1);//Calender 0表示 一月份
int day = 0; // day中存放某个月份的天数
// 以下根据月份判断当月有多少天,其中二月份要判断是否是闰年
if (month_sel == 1 || month_sel == 3 || month_sel ==
5
|| month_sel == 7 || month_sel == 8 || month_sel ==
10
|| month_sel == 12) {
day = 31;
} else if (month_sel == 4 || month_sel == 6 || month_sel ==
9
|| month_sel == 11) {
day = 30;
} else {
GregorianCalendar cal = new GregorianCalendar(year_sel,
month_sel,
1);
//
创建一个Calendar实例,注意GregorianCalendar的月是基于0的,此处和月份无关,
// 所以只要年份无误即可
if (cal.isLeapYear(year_sel)) {// 判断是否闰年
day = 29;
} else {
day = 28;
}
}
int day_week = 0; // 用来存放某个月的第一天是星期几的数值
int first = dt.get(Calendar.DAY_OF_WEEK);
// 1,2,3,4,5,6,7,分别表示星期日 一
二三 四
五六
// System.out.println("first:" + first);
day_week = 7 + dt.get(Calendar.DAY_OF_WEEK)-1;
System.out.println(year_sel+"年"+month_sel+"月份第一天是星期:" +
first);
int count = 1;
for (int i = day_week; i < day_week + day; count++, i++)
{
button_day[i].setEnabled(true);
button_day[i].setForeground(Color.black);
button_day[i].setText(count + "");
}
// --对于没有日期数值显示的按钮进行置空处理
// 第一天前面的按钮置空
for (int i = 7; i < day_week; i++) {
button_day[i].setText("");
button_day[i].setEnabled(false);
} // 最后一天后面的按钮置空
for (int i = day_week + day; i < 49; i++) {
button_day[i].setText("");
button_day[i].setEnabled(false);
}
}
//
点击按钮产生的效果
public void actionPerformed(ActionEvent e) {
if (e.getSource() == button_jump) {
bool = false;
this.setDay(); // 如果点击跳转按钮就调用setDay()方法重新绘制按钮
} else if (e.getSource() == button_today) {
bool = true;
Month.setSelectedIndex(now_month);// 将月份置为当前月份
System.out.println("当前月份 =:" + now_month);
Year.setSelectedIndex(10); // 将年份置为当前年份
this.setDay(); // 如果点击现在日期按钮,得到今天的日期
}
}
public static void main(String[] args) {
CalenderTrain ct = new CalenderTrain();
}
}