/*长春工程学院软件学院
* 张国维
* 完成于2006年12月13日
* 简单的日历控件
*/
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.*;
public class CalendarE extends JFrame {
private static final long serialVersionUID = 6491915283937096860L;
private JComboBox jtf1 = new JComboBox();// 选择年下拉框
private JComboBox jtf2 = new JComboBox();// 选择月下来框
private JLabel jlb1 = new JLabel("选则年");
private JLabel jlb2 = new JLabel("选择月");
private JPanel jp1 = new JPanel();// 放选择的控件
private JPanel jp2 = new JPanel();// 显示日期
private int year;// 记录哪一年
private int month;// 记录哪一月
private int week;// 记录星期几
private int dayNum;// 记录某月中的天数
private GregorianCalendar aa = new GregorianCalendar();
public CalendarE() {
for (int i = 1; i < 13; i++) {
jtf2.addItem(Integer.valueOf(i));// 生成月份
jtf1.addItem(String.valueOf(2000 + i));// 生成年份
}
jp1.add(jlb1);
jp1.add(jtf1);
jp1.add(jlb2);
jp1.add(jtf2);
this.add(jp1, BorderLayout.NORTH);// 将第一个面板加入
GridLayout gl = new GridLayout(7, 7, 3, 3);
jp2.setLayout(gl); // 设置第二个面板布局方式为表格布局;
dayNum = aa.getActualMaximum(Calendar.DAY_OF_MONTH);
month = aa.get(Calendar.MONTH);// 为什么将月份 ;
year = aa.get(Calendar.YEAR);
jtf1.setSelectedItem(String.valueOf(year));
jtf2.setSelectedIndex(month);
aa.set(year, month, 1);
week = aa.get(Calendar.DAY_OF_WEEK);
this.addControl(week, dayNum);
jtf1.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent arg0) {
if (arg0.getStateChange() == ItemEvent.SELECTED) {
int y = Integer.parseInt(jtf1.getSelectedItem().toString());
int m = Integer.parseInt(jtf2.getSelectedItem().toString());
aa.set(y, m - 1, 1);
jp2.removeAll();
jp2.updateUI();
addControl(aa.get(Calendar.DAY_OF_WEEK), aa
.getActualMaximum(Calendar.DAY_OF_MONTH));
}
}
});
jtf2.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent arg0) {
if (arg0.getStateChange() == ItemEvent.SELECTED) {
int y = Integer.parseInt(jtf1.getSelectedItem().toString());
int m = Integer.parseInt(jtf2.getSelectedItem().toString());
aa.set(y, m - 1, 1);
jp2.removeAll();
jp2.updateUI();
addControl(aa.get(Calendar.DAY_OF_WEEK), aa
.getActualMaximum(Calendar.DAY_OF_MONTH));
}
}
});
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.add(jp2, BorderLayout.SOUTH);
this.setSize(800, 800);
this.setResizable(false);
this.pack();
this.setVisible(true);
}
public static void main(String[] args) {
new CalendarE();
}
public void addControl(int week, int dayNum) {
String[] weekday = new String[] { "星期日", "星期一", "星期二", "星期三", "星期四",
"星期五", "星期六" };
int a = 43 - week;
for (int i = 0; i < 7; i++) {// 循环将日期添加到面板中;
jp2.add(new JButton(weekday[i]));
}
for (int i = 1; i < week; i++) {// 添加前面空白的按钮
jp2.add(new JButton());
}
for (int i = 1; i <= a; i++) {
if (i <= dayNum) {// 添加日期按钮
jp2.add(new JButton(String.valueOf(i)));
} else
// 添加后面空白的按钮
jp2.add(new JButton());
}
}
}