📄 calendar.java
字号:
import java.io.*; //导出需要使用的包
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.*;
import java.sql.Date;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.*;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JComboBox;
import javax.swing.*;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.*;
public class CALENDAR extends JFrame{ //定义PUBLIC类继承了JFRAME容器
// 构造器, 建立图形界面
JButton Baocun = new JButton("日历保存"); //用NEW创建保存按钮对象
JPanel panel = new JPanel(new BorderLayout()); //用NEW创建Panel面板(想法:用于后面的大的面板)对象
JPanel panel1 = new JPanel(); //用NEW创建Panel1面板(想法:用于北边)的对象
JPanel panel2 = new JPanel(new GridLayout(7, 7)); //用NEW创建Panel2面板(想法:用于中间)布局是7*7的label的对象
JPanel panel3 = new JPanel(); //用NEW创建Panel3面板(想法:用于南边)
JLabel[] label = new JLabel[49]; //用NEW创建LABEL对象
String[] s = new String[49]; //并将Lable对象定义为字符串数组
JLabel y_label = new JLabel("年"); //创建“年”标签
JLabel m_label = new JLabel("月"); //创建“月”标签
JComboBox com1 = new JComboBox(); //创建一个下拉菜单(用于“年”)
JComboBox com2 = new JComboBox(); //创建一个下拉菜单(用于“月”)
//定义一些变量并将CALENDAR实例化
Font font = new Font("dialog",Font.PLAIN,13); //设置字体(字体是dialog,字形是PLAIN,字号为13)
int re_year, re_month; //定义变量
int x_size, y_size;
int mm,yy,rr;
String bin=getMonthEnglish(Calendar.getInstance().get(Calendar.MONTH));
String year_num;
Calendar now = Calendar.getInstance(); // 将Calendar实例化。 实例化方法都写在getInstance()方法里
//构造函数
CALENDAR() {
super("颜晓春日历");
setSize(400, 300); //设置大小
x_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth());
y_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight());
setLocation((x_size - 300) / 2, (y_size - 350) / 2);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel1.add(com1); //将COM1(年的下拉菜单)添加到面板1中
panel1.add(y_label); //将“年”标签添加到面板1中
panel1.add(com2); //将COM2(月的下拉菜单)添加到面板1中
panel1.add(m_label); //将“月”标签添加到面板1中
for (int i = 0; i < 49; i++) { //每49个Label做一次循环
label[i] = new JLabel("", JLabel.CENTER); // 将显示的字符设置为居中
panel2.add(label[i]); //将label加到面板2中
}
//设置布局
panel.add(panel1, BorderLayout.NORTH); //将panel1布局在北边并添加到panel中
panel.add(panel2, BorderLayout.CENTER); //将panek2布局在中间并添加到panel中
panel3.add(Baocun); //将baocun(保存)按钮添加到panel3中
panel.add(panel3, BorderLayout.SOUTH); //将panel3布局在南边并添加到panel面板中
panel.setBackground(Color.blue); //设置整个模块的背景色
panel1.setBackground(Color.cyan); //设置底部模块的背景色
panel2.setBackground(Color.lightGray); //设置中间模块的背景色
panel3.setBackground(Color.white); //设置底部模块的背景色
Init();
com1.addActionListener(new ClockAction()); // 对COM1组件注册监听内部类
com2.addActionListener(new ClockAction()); // 对COM2组件注册监听内部类
setContentPane(panel); //javax.swing.JFrame 包中的方法,此方法是JFrame实现接口RootPaneContainer中定义的方法
setVisible(true); //组件显示为可见
setResizable(true); //大小可改变
}
// 设置监听器来监听所有事件源产生的事件,便于处理事件代码模块化
class ClockAction implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
int c_year, c_month, c_week;
c_year = Integer.parseInt(com1.getSelectedItem().toString()); // 得到当前所选年份
yy=c_year;
c_month = Integer.parseInt(com2.getSelectedItem().toString()) - 1; // 得到当前月份,并减1,计算机中的月为0-11
mm=c_month+1;
//判断月份
switch(mm)
{
case 1:
bin="January"; break;
case 2:
bin="February"; break;
case 3:
bin="March"; break;
case 4:
bin="April"; break;
case 5:
bin="May"; break;
case 6:
bin="June"; break;
case 7:
bin="July"; break;
case 8:
bin="August"; break;
case 9:
bin="September";break;
case 10:
bin="October"; break;
case 11:
bin="November"; break;
case 12:
bin="December"; break;
}
c_week = use(c_year, c_month); // 调用函数use,得到星期几
rr=c_week;
Resetday(c_week, c_year, c_month); // 调用Resetday 函数
}
}
//获取系统当前的月份,并将其转换成英文
public String getMonthEnglish(int monthnum)
{
String bin="";
switch(monthnum+1) //mouthnum是从0开始的
{
case 1:
bin="January"; break;
case 2:
bin="February"; break;
case 3:
bin="March"; break;
case 4:
bin="April"; break;
case 5:
bin="May"; break;
case 6:
bin="June"; break;
case 7:
bin="July"; break;
case 8:
bin="August"; break;
case 9:
bin="September"; break;
case 10:
bin="October"; break;
case 11:
bin="November"; break;
case 12:
bin="December"; break;
}
return bin;
}
//对面板中的49个LABEL进行设置
public void Init() {
int year, month_num, first_day_num,nowYear;
String log[] = { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" };
for (int i = 0; i < 7; i++) {
label[i].setText(log[i]); //将标签的第一行分别设置从“SUN”到“SAT”7个Label
}
for (int i = 0; i < 49; i = i + 7) {
label[i].setForeground(Color.red); // 将星期日的日期设置为红色
}
for (int i = 6; i < 49; i = i + 7) {
label[i].setForeground(Color.green); // 将星期六的日期设置为绿色
}
for (int i = 1; i<2040; i++) { // 将年份的下拉选项设置从1到2039年之间
com1.addItem("" + i); //将整数转化成字符串
}
for (int i = 1; i < 13; i++) { //将月份的下拉选项设置从1到12月之间
com2.addItem("" + i); //将整数转化成字符串
}
month_num = (int) (now.get(Calendar.MONTH)); // 得到当前时间的月份
year = (int) (now.get(Calendar.YEAR)); // 得到当前时间的年份
com1.setSelectedIndex(year-1); // 设置下拉列表显示为当前年
com2.setSelectedIndex(month_num); // 设置下拉列表显示为当前月
first_day_num = use(year, month_num);
Resetday(first_day_num, year, month_num);
//将BAOCUN(保存)按钮作为事件监听
Baocun.addActionListener(new
java.awt.event.ActionListener(){
public void actionPerformed(ActionEvent e){
Baocun_actionPerformed(e);
}
});
Baocun.setEnabled(true);
}
public int use(int reyear, int remonth) {
int week_num;
now.set(reyear, remonth, 1); // 设置时间为所要查询的年月的第一天
week_num = (int) (now.get(Calendar.DAY_OF_WEEK)); // 得到第一天的星期
return week_num;
}
//Resetday函数
@SuppressWarnings("deprecation")
public void Resetday(int week_log, int year_log, int month_log) {
int month_day_score; // 存储月份的天数
int count; //初始化
month_day_score = 0;
count = 1;
int month;
long sum;
Date date = new Date(year_log, month_log + 1, 1); // now
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(date);
//判断是几月份,根据它来输入day的值
if( month_log==0 || month_log==2 || month_log==4 || month_log==6 || month_log==7 || month_log==9 || month_log==11)
{
month_day_score = 31; //一年的1,3,5,7,8,10,12为大月,31天
}
else if(month_log==3 || month_log==5 || month_log==8 || month_log==10)
{
month_day_score=30; //一年的4,6,9,11为小月,共30天
}
else
{
if(cal.isLeapYear(year_log)) //判断是否为软件
{
month_day_score=29; //闰年为29天
}
else
{
month_day_score=28; //否则,一月的天数为28
}
}
for (int i = 7; i < 49; i++) { // 初始化标签
label[i].setText("");
}
for(int i=0;i<49;i++)
{
s[i]=""; //将标签中赋空值
}
//week_log是星期几, month_day_score是这个月的总天数
week_log = week_log+6; // 将星期数加6,使显示正确
month_day_score = month_day_score+week_log;
for (int i = week_log; i < month_day_score; i++, count++) {
label[i].setFont(font);
label[i].setText(count+""); s[i+1]=count+"";
}
}
//获取系统时间
void Baocun_actionPerformed(ActionEvent e){
Calendar ca1 = Calendar.getInstance();
int yearnow = ca1.get(Calendar.YEAR); //年
int monthnow = ca1.get(Calendar.MONTH)+1; //月(月是从0开始的,所以要加1)
int daynow = ca1.get(Calendar.DATE); //天
int hournow = ca1.get(Calendar.HOUR_OF_DAY); //时
int minutenow = ca1.get(Calendar.MINUTE); //分
int secondnow = ca1.get(Calendar.SECOND); //秒
int weeknow = ca1.get(Calendar.WEDNESDAY); //当前周
// 抓取捕获异常
try
{
FileWriter fw = new FileWriter("E:\\M05003333.txt");
File file = new File("E:\\M05003333.txt");
//将文档清空
new FileOutputStream(file,false);
fw.flush(); //强制将输出流缓冲区的数据送出~~
fw.close(); //关闭流
FileOutputStream os = new FileOutputStream(file);
DataOutputStream out = new DataOutputStream(os);
out.writeBytes(" calendar");
out.writeBytes("\r\n");
out.writeBytes(" "+ bin);
out.writeBytes("\r\n");
out.writeBytes("_______________________________________________");
out.writeBytes("\r\n");
for(int i = 0 ; i < 7 ; i++)
{
out.writeBytes(" "+ label[i].getText());//输出LABEL前7个,即SUN,MON到SAT。并每个之间空4格
}
out.writeBytes("\r");
for(int i = 7; i < 49 ; i++)
{
int len = s[i].length();
if (s[i].equals("")) // 如果是标签中是空值,则输出6个空格
{
out.writeBytes(" ");
}
else if (len == 1) //如果标签中是一位数,则输出4个空格加其值再加一个空格
{
out.writeBytes(" "+s[i]+" ");
}
else if(len == 2) //如果是标签中是两位数字的话,则输出三个空格加上其值再加上一个空格
{
out.writeBytes(" "+s[i]+" ");
}
if(i % 7 == 0) //每到周六就换行回车
{
out.writeBytes("\r\n");
}
}
out.writeBytes("\r\n"); //换行回车
//弹出对话框
JOptionPane.showMessageDialog(this," 您已经导出到E盘!","恭喜您成功了",JOptionPane.WARNING_MESSAGE);
out.writeBytes("\r\n");
//输出格式
out.writeUTF(" 今天是:" + yearnow + "年" + monthnow + "月" + daynow +
"日,星期" +
getChineseDayOfWeek(ca1.get(ca1.DAY_OF_WEEK)));
out.writeBytes("\r\n");
out.writeUTF(" 当前时间是:" + hournow + "时" + minutenow + "分" +
secondnow + "秒");
out.close();
}
catch(Exception e1){ //例外事件处理
System.out.println("Error:"+e1);
}
}
//将阿拉伯数字转化成大写中文字母
public static String getChineseDayOfWeek(int dayOfWeek) {
switch (dayOfWeek) {
case java.util.Calendar.MONDAY:
return "一";
case java.util.Calendar.TUESDAY:
return "二";
case java.util.Calendar.WEDNESDAY:
return "三";
case java.util.Calendar.THURSDAY:
return "四";
case java.util.Calendar.FRIDAY:
return "五";
case java.util.Calendar.SATURDAY:
return "六";
case java.util.Calendar.SUNDAY:
return "日";
}
return "";
}
public static void main(String[] args) { //主函数
new CALENDAR();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -