📄 calendarframe.java
字号:
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.SystemColor;
import javax.swing.JButton;
import java.awt.Rectangle;
import javax.swing.*;
import java.awt.Font;
import java.awt.event.*;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Calendar;
/**
* <p>
* Title:万年历
* </p>
*
* <p>
* Description:本程序实现了一个万年历,只包含一个类CalendarFrame
* </p>
*
* <p>
* Copyright: Copyright (c) 2008
* </p>
*
* <p>
* Company: National Pilot School of HIT
* </p>
*
* @author 李德志(Ralph Li)
* @version 1.0
*/
public class CalendarFrame extends JFrame {
/**
*
*/
private static final long serialVersionUID = -7555744442172691200L;
JPanel contentPane;
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();
JTextField MM = new JTextField();// 标题栏的月份
JTextField DD = new JTextField();// 标题栏的日期
JTextField YYYY = new JTextField();// 标题栏的年份
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
JLabel jLabel3 = new JLabel();
JLabel jLabel4 = new JLabel();
JLabel jLabel5 = new JLabel();
JLabel jLabel6 = new JLabel();
JTextField[] dayLabel = new JTextField[42];// 用于显示日期
String isChecked = null;// 标识标题栏中哪一项(月,日,年)被选中
Calendar now = Calendar.getInstance(); // 实例化Calendar
public CalendarFrame() {
// 获取绝对定位容器
contentPane = (JPanel) getContentPane();
contentPane.setLayout(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
int year, month_num, first_day_num;
// 设置窗体大小及标题
setSize(new Dimension(500, 400));
setTitle("Calendar");
contentPane.setBackground(SystemColor.control);
// 设置OK按钮位置及注册鼠标事件
jButton1.setBounds(new Rectangle(243, 326, 81, 23));
jButton1.setText("OK");
jButton1.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
JOptionPane.showMessageDialog(null, YYYY.getText() + "年"
+ MM.getText() + "月" + DD.getText() + "日");
dispose();
}
});
// 设置Cancel按钮位置及注册鼠标事件
jButton2.setBounds(new Rectangle(344, 326, 81, 23));
jButton2.setText("Cancel");
jButton2.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
dispose();
}
});
// 设置月份按钮位置及注册鼠标事件
MM.setBackground(SystemColor.control);
MM.setFont(new java.awt.Font("宋体", Font.PLAIN, 16));
MM.setBorder(null);
MM.setCaretColor(Color.black);
MM.setEditable(false);
MM.setText("MM");
MM.setBounds(new Rectangle(63, 52, 16, 20));
MM.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
MM.setBackground(Color.PINK);
DD.setBackground(SystemColor.control);
YYYY.setBackground(SystemColor.control);
isChecked = "MM";
}
});
jLabel1.setText("-");
jLabel1.setBounds(new Rectangle(83, 52, 12, 15));
// 设置天份按钮位置及注册鼠标事件
DD.setBackground(SystemColor.control);
DD.setFont(new java.awt.Font("宋体", Font.PLAIN, 16));
DD.setBorder(null);
DD.setEditable(false);
DD.setText("DD");
DD.setBounds(new Rectangle(92, 52, 19, 20));
DD.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
DD.setBackground(Color.PINK);
YYYY.setBackground(SystemColor.control);
MM.setBackground(SystemColor.control);
isChecked = "DD";
}
});
jLabel2.setText("-");
jLabel2.setBounds(new Rectangle(113, 53, 14, 15));
// 设置年份按钮位置及注册鼠标事件
YYYY.setBackground(SystemColor.control);
YYYY.setFont(new java.awt.Font("宋体", Font.PLAIN, 16));
YYYY.setBorder(null);
YYYY.setEditable(false);
YYYY.setText("YYYY");
YYYY.setBounds(new Rectangle(124, 52, 33, 20));
YYYY.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
YYYY.setBackground(Color.PINK);
MM.setBackground(SystemColor.control);
DD.setBackground(SystemColor.control);
isChecked = "YYYY";
}
});
// 设置月份左移按钮位置及注册鼠标事件
jLabel3.setForeground(Color.black);
jLabel3.setText("<");
jLabel3.setBounds(new Rectangle(65, 119, 13, 15));
jLabel3.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
// System.out.println("into!"+MM.getText()+DD.getText()+YYYY.getText());
int thisMonth = Integer.parseInt(MM.getText());// 获取月
int thisDay = Integer.parseInt(DD.getText());// 获取天
int thisYear = Integer.parseInt(YYYY.getText()); // 获取年
if(thisMonth==1&&thisYear==1)
{
JOptionPane.showMessageDialog(null, "你莫非对公元前的事感兴趣?那翻别的日历吧");
dispose();
}
if (thisMonth == 1) {
thisMonth = 12;
thisYear--;
clearAll(thisYear, thisMonth, thisDay);
} else {
thisMonth--;
// 试探修改后的日期是否为合法日期,如不合法则往前递推
String str = new Integer(thisYear).toString() + "-"
+ new Integer(thisMonth).toString() + "-"
+ new Integer(thisDay).toString();
while (!(isDate(str, "yyyy.MM.dd") | isDate(str,
"yyyy-MM-dd"))) {
thisDay--;
str = new Integer(thisYear).toString() + "-"
+ new Integer(thisMonth).toString() + "-"
+ new Integer(thisDay).toString();
}
clearAll(thisYear, thisMonth, thisDay);// 刷新日期
}
}
});
// 设置月份右移按钮位置及注册鼠标事件
jLabel4.setText(">");
jLabel4.setBounds(new Rectangle(423, 119, 42, 15));
jLabel4.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int thisMonth = Integer.parseInt(MM.getText());
int thisDay = Integer.parseInt(DD.getText());
int thisYear = Integer.parseInt(YYYY.getText());
if (thisMonth == 12) {
thisMonth = 1;
thisYear++;
clearAll(thisYear, thisMonth, thisDay);
} else {
thisMonth++;
// 试探修改后的日期是否为合法日期,如不合法则往前递推
String str = new Integer(thisYear).toString() + "-"
+ new Integer(thisMonth).toString() + "-"
+ new Integer(thisDay).toString();
while (!(isDate(str, "yyyy.MM.dd") | isDate(str,
"yyyy-MM-dd"))) {
thisDay--;
str = new Integer(thisYear).toString() + "-"
+ new Integer(thisMonth).toString() + "-"
+ new Integer(thisDay).toString();
}
clearAll(thisYear, thisMonth, thisDay);// 刷新日期
}
}
});
// 设置可编辑选中标题栏的上移按钮位置及注册鼠标事件
jLabel5.setText("∧");
jLabel5.setBounds(new Rectangle(423, 52, 42, 15));
jLabel5.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int thisMonth = Integer.parseInt(MM.getText());// 获取月
int thisDay = Integer.parseInt(DD.getText());// 获取天
int thisYear = Integer.parseInt(YYYY.getText()); // 获取年
if (isChecked.equals("YYYY"))// 选中的是年
{
thisYear++;
// 试探修改后的日期是否为合法日期,如不合法则往前递推
String str = new Integer(thisYear).toString() + "-"
+ new Integer(thisMonth).toString() + "-"
+ new Integer(thisDay).toString();
if (!(isDate(str, "yyyy.MM.dd") | isDate(str, "yyyy-MM-dd"))) {
thisDay --;
clearAll(thisYear, thisMonth, thisDay);
} else {
clearAll(thisYear, thisMonth, thisDay);// 刷新日期
}
} else if (isChecked.equals("MM"))// 选中的是月
{
if (thisMonth == 12) {
thisMonth = 1;
thisYear++;
clearAll(thisYear, thisMonth, thisDay);
} else {
thisMonth++;
// 试探修改后的日期是否为合法日期,如不合法则往前递推,直到遇到合法日期
String str = new Integer(thisYear).toString() + "-"
+ new Integer(thisMonth).toString() + "-"
+ new Integer(thisDay).toString();
while (!(isDate(str, "yyyy.MM.dd") | isDate(str,
"yyyy-MM-dd"))) {
// System.out.println(thisMonth);
thisDay--;
str = new Integer(thisYear).toString() + "-"
+ new Integer(thisMonth).toString() + "-"
+ new Integer(thisDay).toString();
// thisMonth++;
// System.out.println(thisMonth);
}
clearAll(thisYear, thisMonth, thisDay);// 刷新日期
}
} else if (isChecked.equals("DD"))// 选中的是天
{
if (thisDay == 31) {
thisDay = 1;
if (thisMonth == 12)// 选中了某年的12月31号
{
thisMonth = 1;
thisYear++;
} else {
thisMonth++;
}
clearAll(thisYear, thisMonth, thisDay);// 刷新日期
} else {
thisDay++;
// 试探修改后的日期是否为合法日期,如不合法则说明该月结束,跳到下个月第一天并刷新日期
String str = new Integer(thisYear).toString() + "-"
+ new Integer(thisMonth).toString() + "-"
+ new Integer(thisDay).toString();
if (!(isDate(str, "yyyy.MM.dd") | isDate(str,
"yyyy-MM-dd"))) {
thisDay = 1;
thisMonth++;
clearAll(thisYear, thisMonth, thisDay);// 刷新日期
} else// 试探日期合法,不刷新,更改显示
{
YYYY.setText(new Integer(thisYear).toString());
MM.setText(new Integer(thisMonth).toString());
DD.setText(new Integer(thisDay).toString());
}
}
}
}
});
// 设置可编辑选中标题栏的上移按钮位置及注册鼠标事件
jLabel6.setText("∨");
jLabel6.setBounds(new Rectangle(423, 64, 42, 15));
jLabel6.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int thisMonth = Integer.parseInt(MM.getText());// 获取月
int thisDay = Integer.parseInt(DD.getText());// 获取天
int thisYear = Integer.parseInt(YYYY.getText()); // 获取年
if (isChecked.equals("YYYY"))// 年被选中
{
if(thisYear==1)
{
JOptionPane.showMessageDialog(null, "你莫非对公元前的事感兴趣?那翻别的日历吧");
dispose();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -