⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calendarframe.java

📁 实现了一个超级万年历程序,具有很好的参考价值
💻 JAVA
📖 第 1 页 / 共 2 页
字号:

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 + -