java写万年历的代码

import java.awt.Color;    
import java.awt.Font;    
import java.awt.GridLayout;    
import java.awt.event.ActionEvent;    
import java.awt.event.ActionListener;    
import java.awt.event.ItemEvent;    
import java.awt.event.ItemListener;    
import java.util.Date;    
import java.util.GregorianCalendar;    
import javax.swing.JButton;    
import javax.swing.JComboBox;    
import javax.swing.JFrame;    
import javax.swing.JLabel;    
public class Calender2 extends JFrame implements ActionListener, ItemListener {    
/**   
* 实现简单的日历功能   
*   
* @author Jadie version 1.0 2007/12/29   
*   
*/    
private static final long serialVersionUID = 1L;    
  
public static void main(String args[]) {    
try {    
Calender2 frame = new Calender2();    
frame.setVisible(true);    
} catch (Exception e) {    
e.printStackTrace();    
}    
}    
private Date date = new Date();    
  
private GregorianCalendar gregorianCalendar = new GregorianCalendar();    
  
private String[] stringWeek = new String[] { "SUN", "MON", "TUE", "WED",    
"THU", "FRI", "SAT" };    
  
private String[] stringWeekCn = new String[] { "星期天", "星期一", "星期二", "星期三",    
"星期四", "星期五", "星期六" };    
  
private String[] stringMonth = new String[] { "Jan", "Feb", "Mar", "Apr",    
"May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec" };    
private String[] strSysTime = new String[6];    
// 存储当前日期信息    
private String[] strSysNowTime = new String[6];    
// 存储运行时日期信息    
private JButton[] buttonDay = new JButton[42];    
private JButton[] buttonWeek = new JButton[7];    
private JLabel labelMonth = new JLabel();    
private JButton buttonToday = new JButton();    
private JButton buttonLastMonth = new JButton();    
private JButton buttonNextMonth = new JButton();    
private JComboBox comboYear = new JComboBox();    
private JComboBox comboMonth = new JComboBox();    
public Calender2() {    
super("万年历---156制作");    
getContentPane().setLayout(new GridLayout(8, 7, 3, 5));    
setBounds(250, 200, 530, 360);    
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
  
comboYear.setForeground(new Color(0, 0, 255));    
comboYear.setFont(new Font("", Font.PLAIN, 14));    
for (int y = 1900; y < 2101; y++) {    
comboYear.addItem("  " + new Integer(y).toString());    
}    
getContentPane().add(comboYear);    
comboYear.addItemListener(this);    
  
final JLabel labelYear = new JLabel();    
labelYear.setForeground(Color.BLUE);    
labelYear.setFont(new Font("新宋体", Font.PLAIN, 14));    
getContentPane().add(labelYear);    
labelYear.setText("    年");    
  
comboMonth.setForeground(new Color(0, 0, 255));    
comboMonth.setFont(new Font("", Font.PLAIN, 14));    
for (int m = 1; m < 13; m++) {    
comboMonth.addItem("    " + new Integer(m).toString());    
}    
getContentPane().add(comboMonth);    
comboMonth.addItemListener(this);    
  
getContentPane().add(labelMonth);    
labelMonth.setForeground(Color.BLUE);    
labelMonth.setFont(new Font("新宋体", Font.PLAIN, 14));    
labelMonth.setText("    月");    
  
getContentPane().add(buttonLastMonth);    
buttonLastMonth.setForeground(Color.BLUE);    
buttonLastMonth.setFont(new Font("新宋体", Font.PLAIN, 14));    
buttonLastMonth.setText("上月");    
buttonLastMonth.addActionListener(this);    
  
getContentPane().add(buttonToday);    
buttonToday.setForeground(Color.BLUE);    
buttonToday.setFont(new Font("新宋体", Font.PLAIN, 14));    
buttonToday.setText("今天");    
buttonToday.addActionListener(this);    
  
getContentPane().add(buttonNextMonth);    
buttonNextMonth.setForeground(Color.BLUE);    
buttonNextMonth.setFont(new Font("新宋体", Font.PLAIN, 14));    
buttonNextMonth.setText("下月");    
buttonNextMonth.addActionListener(this);    
  
for (int i = 0; i < 7; i++) {    
buttonWeek[i] = new JButton();    
if (i == 0 || i == 6) {    
buttonWeek[i].setForeground(Color.RED);    
} else {    
buttonWeek[i].setForeground(Color.BLUE);    
}    
buttonWeek[i].setFont(new Font("新宋体", Font.PLAIN, 12));    
buttonWeek[i].setText(stringWeekCn[i]);    
getContentPane().add(buttonWeek[i]);    
}    
  
for (int i = 0; i < 42; i++) {    
buttonDay[i] = new JButton();    
buttonDay[i].setText("");    
getContentPane().add(buttonDay[i]);    
}    
this.setResizable(false);    
getSysNowTimeInfo();    
setNowDate();    
setNowDate();    
}    
  
public void setSysDate(int year, int month) {    
// 将日期设置为year年month月1日    
gregorianCalendar.set(year, month, 1);    
}    
  
public void actionPerformed(ActionEvent ae) {    
if (ae.getSource() == buttonToday) {    
setNowDate();    
setNowDate();    
} else if (ae.getSource() == buttonLastMonth) {    
setDate(-1);    
} else {    
setDate(1);    
}    
}    
  
public void itemStateChanged(ItemEvent arg0) {    
setDate(0);    
}    
  
public void getSysNowTimeInfo() {    
// 得到程序运行时的时间信息并存储在字符串数组strSysNowTime中    
date = gregorianCalendar.getTime();    
strSysNowTime = (date + "").split(" ");    
}    
  
public void getSysTimeInfo() {    
// 得到系统当前的时间信息并存储在字符串数组strSysTime中    
date = gregorianCalendar.getTime();    
strSysTime = (date + "").split(" ");    
}    
  
public int getNowMonth() {    
int month = 0;    
for (int i = 0; i < 12; i++) {    
if (strSysNowTime[1].equalsIgnoreCase(stringMonth[i])) {    
month = i;    
break;    
}    
}    
return month;    
}    
  
public int weekStrat(String strWeek) {    
// 返回字符串strWeek与星期中的第几天匹配,SUN为第一天    
int strat = 0;    
for (int i = 0; i < 7; i++) {    
if (strWeek.equalsIgnoreCase(stringWeek[i])) {    
strat = i;    
break;    
}    
}    
return strat;    
}    
  
public void setNowDate() {    
// 将时间设置为程序运行时的时间    
setSysTime(getNowYear(), getNowMonth());    
getSysTimeInfo();    
setDayNull();    
getDay(getMonthDays(getNowYear(), getNowMonth() - 1), getMonthDays(    
getNowYear(), getNowMonth()), weekStrat(strSysTime[0]),    
getNowDay());    
comboYear.setSelectedIndex(getNowYear() - 1900);    
comboMonth.setSelectedIndex(getNowMonth());    
}    
  
public void setDate(int move) {    
// 将时间设置为选中的年月增加move个月之后的时间    
setSysTime(getYear(), getMonth() + move);    
getSysTimeInfo();    
setDayNull();    
getDay(getMonthDays(getYear(), getMonth() + move - 1), getMonthDays(    
getYear(), getMonth() + move), weekStrat(strSysTime[0]), -1);    
if (move != 0) {    
if (getMonth() == 0 && move < 0) {    
move = 11;    
comboYear.setSelectedIndex(getYear() - 1901);    
} else if (getMonth() == 11 && move > 0) {    
move = -11;    
comboYear.setSelectedIndex(getYear() - 1899);    
} else {    
comboYear.setSelectedIndex(getYear() - 1900);    
}    
comboMonth.setSelectedIndex(getMonth() + move);    
}    
}    
  
public void setSysTime(int year, int month) {    
gregorianCalendar.set(year, month, 1);    
}    
  
public int getNowYear() {    
return Integer.parseInt(strSysNowTime[5]);    
}    
  
public int getNowDay() {    
return Integer.parseInt(strSysNowTime[2]);    
}    
  
public int getYear() {    
return comboYear.getSelectedIndex() + 1900;    
}    
  
public int getMonth() {    
return comboMonth.getSelectedIndex();    
}    
  
public void setDayNull() {    
for (int d = 0; d < 42; d++) {    
buttonDay[d].setText("");    
}    
}    
  
public void getDay(int lastMonDays, int monthDays, int startWeek, int day) {    
// 设置日期颜色并打印    
for (int d = 0; d < startWeek + 1; d++) {    
buttonDay[d].setForeground(Color.GRAY);    
buttonDay[d].setText((lastMonDays - startWeek) + d + 1 + "");    
}    
for (int d = startWeek; d < startWeek + monthDays; d++) {    
if ((d - startWeek + 1) == day) {    
buttonDay[d].setForeground(Color.blue);    
} else if (d % 7 == 0 || d % 7 == 6) {    
buttonDay[d].setForeground(Color.RED);    
} else {    
buttonDay[d].setForeground(Color.BLACK);    
}    
  
buttonDay[d].setText(d - startWeek + 1 + "");    
}    
for (int d = monthDays + startWeek; d < 42; d++) {    
buttonDay[d].setForeground(Color.GRAY);    
buttonDay[d].setText(d - (monthDays + startWeek) + 1 + "");    
}    
}    
  
public int getMonthDays(int year, int month) {    
// 返回year年month月的天数    
switch (month) {    
case 3:    
case 5:    
case 8:    
case 10:    
return 30;    
case 1:    
if (gregorianCalendar.isLeapYear(year)) {    
return 29;    
} else {    
return 28;    
}    
default:    
return 31;    
}    
}    
}  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值