import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class CalenderTrain extends JFrame implements ActionListener {
JComboBox Month = new JComboBox(); //月份下拉列表框
JComboBox Year = new JComboBox(); //年份下拉列表框
JLabel Year_l = new JLabel("Year::"); //定義標(biāo)簽
JLabel Month_l = new JLabel("Month::"); //定義標(biāo)簽
Date now_date = new Date(); //獲取今天的日期
JButton[] button_day = new JButton[49]; //定義一個(gè)數(shù)組用來存放日期
JButton button_ok = new JButton("確定"); //現(xiàn)實(shí)選擇日期
JButton button_today = new JButton("今天"); //顯示今天按鈕
int now_year = now_date.getYear() + 1900; //獲取年份值
int now_month = now_date.getMonth(); //獲取月份值(當(dāng)前月份-1)
String year_int = null; //存放年份
int month_int; //存放月份
JPanel pane_ym = new JPanel(); //放置下拉列表框和控制按鈕面板
JPanel pane_day = new JPanel(); //放置日期面板
JPanel pane_parent = new JPanel(); //放置以上兩個(gè)面板
//定義方法繪制面板
public CalenderTrain() {
super("Calender!"); //設(shè)定面板得title
//---以下幾行使得關(guān)閉面板時(shí)退出程序
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
addWindowListener(new WindowAdapter() {
public void windowClose(WindowEvent e) {
System.exit(0);
}
});
//---
setResizable(false); //面板的大小不能變化
//設(shè)定年月
/*年份的區(qū)間是當(dāng)前年份的過去10年到當(dāng)前年份的未來20年
* 月份正常1??12月
*/
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);//設(shè)定年份下拉列表為當(dāng)前年份
pane_ym.add(Year_l);//添加年份標(biāo)簽
pane_ym.add(Year);//添加年份下拉列表框
Month.setSelectedIndex(now_month);//設(shè)定月份下拉列表為當(dāng)前月份
pane_ym.add(Month_l);//添加月份標(biāo)簽
pane_ym.add(Month);//添加月份下拉列表框
pane_ym.add(button_ok);//添加確定按鈕
pane_ym.add(button_today);//添加“今天”按鈕
button_ok.addActionListener(this);//確定按鈕添加監(jiān)聽事件
button_today.addActionListener(this);//“今天”按鈕添加監(jiān)聽事件
//年月設(shè)定結(jié)束
//初始化日期按鈕并繪制
pane_day.setLayout(new GridLayout(7, 7, 10, 10));
for (int i = 0; i < 49; i++) {
button_day[i] = new JButton(" ");
pane_day.add(button_day[i]);
}
this.setDay();//調(diào)用setDay()方法
pane_parent.setLayout(new BorderLayout());//設(shè)定布局管理器
setContentPane(pane_day);
setContentPane(pane_ym);
pane_parent.add(pane_day, BorderLayout.SOUTH);
pane_parent.add(pane_ym, BorderLayout.NORTH);
setContentPane(pane_parent);
pack();
show();
}
void setDay() {
year_int = Year.getSelectedItem().toString();
month_int = Month.getSelectedIndex();
int year_sel = Integer.parseInt(year_int) - 1900;//獲得年份值
Date dt = new Date(year_sel, month_int, 1);//構(gòu)造一個(gè)日期
GregorianCalendar cal = new GregorianCalendar();//創(chuàng)建一個(gè)Calendar實(shí)例
cal.setTime(dt);
String week[] = { "Sun", "Mon", "Tue", "Wed", "Thur", "Fri", "Sat" };
int day = 0;//day中存放某個(gè)月份的天數(shù)
int day_week = 0;//用來存放某個(gè)月的第一天是星期幾的數(shù)值
//--將星期添加到前7個(gè)按鈕中
for (int i = 0; i < 7; i++) {
button_day[i].setText(week[i]);
}
//--
/*判斷是幾月份,根據(jù)它來設(shè)定day的值
* 其中二月份要判斷是否是閏年
*/
if (month_int == 0
|| month_int == 2
|| month_int == 4
|| month_int == 6
|| month_int == 7
|| month_int == 9
|| month_int == 11) {
day = 31;
} else if (
month_int == 3
|| month_int == 5
|| month_int == 8
|| month_int == 10) {
day = 30;
} else {
if (cal.isLeapYear(year_sel)) {
day = 29;
} else {
day = 28;
}
}
day_week = 7 + dt.getDay();
int count = 1;
/*繪制按鈕
* 在這里我們首先要根據(jù)選定的月份的第一天是星期幾來確定我們繪制按鈕的起始位置
* 其中day_week就是我們要繪制的起始位置
* 對(duì)于那些沒有數(shù)值可以顯示的按鈕要置空
*/
for (int i = day_week; i < day_week + day; count++, i++) {
if (i % 7 == 0
|| i == 13
|| i == 20
|| i == 27
|| i == 48
|| i == 34
|| i == 41) {
button_day[i].setForeground(Color.RED);
button_day[i].setText(count + "");
} else {
button_day[i].setText(count + "");
}
}
//--對(duì)于沒有日期數(shù)值顯示的按鈕進(jìn)行置空處理
if (day_week == 0) {
for (int i = day; i < 49; i++) {
button_day[i].setText(" ");
}
} else {
//第一天前面的按鈕置空
for (int i = 7; i < day_week; i++) {
button_day[i].setText(" ");
}//最后一天后面的按鈕置空
for (int i = day_week + day; i < 49; i++) {
button_day[i].setText(" ");
}
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == button_ok) {
this.setDay();//如果點(diǎn)擊確定按鈕就調(diào)用setDay()重新方法繪制按鈕
} else if (e.getSource() == button_today) {
new CalenderTrain();//如果點(diǎn)擊今天按鈕,得到今天的日期
}
}
public static void main(String[] args) {
CalenderTrain ct = new CalenderTrain();
}
}
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class CalenderTrain extends JFrame implements ActionListener {
JComboBox Month = new JComboBox(); //月份下拉列表框
JComboBox Year = new JComboBox(); //年份下拉列表框
JLabel Year_l = new JLabel("Year::"); //定義標(biāo)簽
JLabel Month_l = new JLabel("Month::"); //定義標(biāo)簽
Date now_date = new Date(); //獲取今天的日期
JButton[] button_day = new JButton[49]; //定義一個(gè)數(shù)組用來存放日期
JButton button_ok = new JButton("確定"); //現(xiàn)實(shí)選擇日期
JButton button_today = new JButton("今天"); //顯示今天按鈕
int now_year = now_date.getYear() + 1900; //獲取年份值
int now_month = now_date.getMonth(); //獲取月份值(當(dāng)前月份-1)
String year_int = null; //存放年份
int month_int; //存放月份
JPanel pane_ym = new JPanel(); //放置下拉列表框和控制按鈕面板
JPanel pane_day = new JPanel(); //放置日期面板
JPanel pane_parent = new JPanel(); //放置以上兩個(gè)面板
//定義方法繪制面板
public CalenderTrain() {
super("Calender!"); //設(shè)定面板得title
//---以下幾行使得關(guān)閉面板時(shí)退出程序
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
addWindowListener(new WindowAdapter() {
public void windowClose(WindowEvent e) {
System.exit(0);
}
});
//---
setResizable(false); //面板的大小不能變化
//設(shè)定年月
/*年份的區(qū)間是當(dāng)前年份的過去10年到當(dāng)前年份的未來20年
* 月份正常1??12月
*/
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);//設(shè)定年份下拉列表為當(dāng)前年份
pane_ym.add(Year_l);//添加年份標(biāo)簽
pane_ym.add(Year);//添加年份下拉列表框
Month.setSelectedIndex(now_month);//設(shè)定月份下拉列表為當(dāng)前月份
pane_ym.add(Month_l);//添加月份標(biāo)簽
pane_ym.add(Month);//添加月份下拉列表框
pane_ym.add(button_ok);//添加確定按鈕
pane_ym.add(button_today);//添加“今天”按鈕
button_ok.addActionListener(this);//確定按鈕添加監(jiān)聽事件
button_today.addActionListener(this);//“今天”按鈕添加監(jiān)聽事件
//年月設(shè)定結(jié)束
//初始化日期按鈕并繪制
pane_day.setLayout(new GridLayout(7, 7, 10, 10));
for (int i = 0; i < 49; i++) {
button_day[i] = new JButton(" ");
pane_day.add(button_day[i]);
}
this.setDay();//調(diào)用setDay()方法
pane_parent.setLayout(new BorderLayout());//設(shè)定布局管理器
setContentPane(pane_day);
setContentPane(pane_ym);
pane_parent.add(pane_day, BorderLayout.SOUTH);
pane_parent.add(pane_ym, BorderLayout.NORTH);
setContentPane(pane_parent);
pack();
show();
}
void setDay() {
year_int = Year.getSelectedItem().toString();
month_int = Month.getSelectedIndex();
int year_sel = Integer.parseInt(year_int) - 1900;//獲得年份值
Date dt = new Date(year_sel, month_int, 1);//構(gòu)造一個(gè)日期
GregorianCalendar cal = new GregorianCalendar();//創(chuàng)建一個(gè)Calendar實(shí)例
cal.setTime(dt);
String week[] = { "Sun", "Mon", "Tue", "Wed", "Thur", "Fri", "Sat" };
int day = 0;//day中存放某個(gè)月份的天數(shù)
int day_week = 0;//用來存放某個(gè)月的第一天是星期幾的數(shù)值
//--將星期添加到前7個(gè)按鈕中
for (int i = 0; i < 7; i++) {
button_day[i].setText(week[i]);
}
//--
/*判斷是幾月份,根據(jù)它來設(shè)定day的值
* 其中二月份要判斷是否是閏年
*/
if (month_int == 0
|| month_int == 2
|| month_int == 4
|| month_int == 6
|| month_int == 7
|| month_int == 9
|| month_int == 11) {
day = 31;
} else if (
month_int == 3
|| month_int == 5
|| month_int == 8
|| month_int == 10) {
day = 30;
} else {
if (cal.isLeapYear(year_sel)) {
day = 29;
} else {
day = 28;
}
}
day_week = 7 + dt.getDay();
int count = 1;
/*繪制按鈕
* 在這里我們首先要根據(jù)選定的月份的第一天是星期幾來確定我們繪制按鈕的起始位置
* 其中day_week就是我們要繪制的起始位置
* 對(duì)于那些沒有數(shù)值可以顯示的按鈕要置空
*/
for (int i = day_week; i < day_week + day; count++, i++) {
if (i % 7 == 0
|| i == 13
|| i == 20
|| i == 27
|| i == 48
|| i == 34
|| i == 41) {
button_day[i].setForeground(Color.RED);
button_day[i].setText(count + "");
} else {
button_day[i].setText(count + "");
}
}
//--對(duì)于沒有日期數(shù)值顯示的按鈕進(jìn)行置空處理
if (day_week == 0) {
for (int i = day; i < 49; i++) {
button_day[i].setText(" ");
}
} else {
//第一天前面的按鈕置空
for (int i = 7; i < day_week; i++) {
button_day[i].setText(" ");
}//最后一天后面的按鈕置空
for (int i = day_week + day; i < 49; i++) {
button_day[i].setText(" ");
}
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == button_ok) {
this.setDay();//如果點(diǎn)擊確定按鈕就調(diào)用setDay()重新方法繪制按鈕
} else if (e.getSource() == button_today) {
new CalenderTrain();//如果點(diǎn)擊今天按鈕,得到今天的日期
}
}
public static void main(String[] args) {
CalenderTrain ct = new CalenderTrain();
}
}