快捷搜索:

JAVA简单的日历程序

/**以下这天历的代码法度榜样

有疑问 复书 ycj@18e.net

**/

//CalenderTrain.java

package com.swing;

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::"); //定义标签

JLabel Month_l = new JLabel("Month::"); //定义标签

Date now_date = new Date(); //获取本日的日期

JButton[] button_day = new JButton[49]; //定义一个数组用来寄放日期

JButton button_ok = new JButton("确定"); //现实选择日期

JButton button_today = new JButton("本日"); //显示本日按钮

int now_year = now_date.getYear() + 1900; //获取年份值

int now_month = now_date.getMonth(); //获取月份值(当前月份-1)

boolean bool = false;

String year_int = null; //寄放年份

int month_int; //寄放月份

JPanel pane_ym = new JPanel(); //放置下拉列表框和节制按钮面板

JPanel pane_day = new JPanel(); //放置日期面板

JPanel pane_parent = new JPanel(); //放置以上两个面板

//定义措施绘制面板

public CalenderTrain() {

super("Calender!"); //设定面板得title

//---以下几行使得关闭面板时退出法度榜样

setDefaultCloseOperation(DISPOSE_ON_CLOSE);

addWindowListener(new WindowAdapter() {

public void windowClose(WindowEvent e) {

System.out.print("CLOSING THE WIN");

System.exit(0);

}

});

//---

setResizable(false); //面板的大年夜小不能变更

//设定年月

/*年份的区间是当前年份的以前10年到当前年份的未来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); //设定年份下拉列表为当前年份

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_ok); //添加确定按钮

pane_ym.add(button_today); //添加“本日”按钮

button_ok.addActionListener(this); //确定按钮添加 监听事故

button_today.addActionListener(this); //“本日”按钮添加 监听事故

//年月设定停止

//初始化日期按钮并绘制

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(); //调用setDay()措施

pane_parent.setLayout(new BorderLayout()); //设定结构治理器

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() {

if (bool) {

year_int = now_year + "";

month_int = now_month;

} else {

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); //构造一个日期

GregorianCalendar cal = new GregorianCalendar(); //创建一个Calendar实例

cal.setTime(dt);

String week[] = { "Sun", "Mon", "Tue", "Wed", "Thur", "Fri", "Sat" };

int day = 0; //day中寄放某个月份的天数

int day_week = 0; //用来寄放某个月的第一天是礼拜几的数值

//--将礼拜添加到前7个按钮中

for (int i = 0; i < 7; i++) {

button_day[i].setText(week[i]);

}

//--

/*判断是几月份,根据它来设定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;

/*绘制按钮

* 在这里我们首先要根据选定的月份的第一天是礼拜几来确定我们绘制按钮的肇端位置

* 此中day_week便是我们要绘制的肇端位置

* 对付那些没稀有值可以显示的按钮要置空

*/

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) {

if (i == day_week + now_date.getDate() - 1) {

button_day[i].setForeground(Color.blue);

button_day[i].setText(count + "");

} else {

button_day[i].setForeground(Color.red);

button_day[i].setText(count + "");

}

} else {

if (i == day_week + now_date.getDate() - 1) {

button_day[i].setForeground(Color.blue);

button_day[i].setText(count + "");

} else {

button_day[i].setForeground(Color.black);

button_day[i].setText(count + "");

}

}

}

//--对付没有日期数值显示的按钮进行置空处置惩罚

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) {

bool = false;

this.setDay(); //假如点击确定按钮就调用setDay()从新措施绘制按钮

} else if (e.getSource() == button_today) {

bool = true;

Year.setSelectedIndex(10);

Month.setSelectedIndex(now_month);

this.setDay(); //假如点击本日按钮,获得本日的日期

}

}

public static void main(String[] args) {

CalenderTrain ct = new CalenderTrain();

}

}

您可能还会对下面的文章感兴趣: