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

📄 calendarframe.java

📁 实现了一个超级万年历程序,具有很好的参考价值
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
					}
					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==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);// 刷新日期
					}

				} 
				else if (isChecked.equals("DD"))// 天被选中
				{
					if(thisMonth==1&&thisYear==1&&thisDay==1)
					{
						JOptionPane.showMessageDialog(null, "你莫非对公元前的事感兴趣?那翻别的日历吧");
						dispose();
					}
					if (thisDay == 1) {
						if (thisMonth == 1)// 某年的1月1号被选中
						{
							thisDay = 31;
							thisMonth = 12;
							thisYear--;
							clearAll(thisYear, thisMonth, thisDay);// 刷新日期
						} else {
							thisMonth--;// 某年的非1月的1号被选中
							thisDay = 31;
							// 从31号开始,试探修改后的日期是否为合法日期,如不合法则往前递推,直到遇到合法日期
							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--;
								// thisMonth++;
								str = new Integer(thisYear).toString() + "-"
										+ new Integer(thisMonth).toString()
										+ "-" + new Integer(thisDay).toString();
							}
							clearAll(thisYear, thisMonth, thisDay);// 刷新日期
						}
					} 
					else// 非1号,更改标题栏显示,不刷新
					{
						thisDay--;
						YYYY.setText(new Integer(thisYear).toString());
						MM.setText(new Integer(thisMonth).toString());
						DD.setText(new Integer(thisDay).toString());
					}
				}

			}
		});

		// 设置显示日期的控件的位置及初始值
		for (int i = 0; i < 42; i++) {
			dayLabel[i] = new JTextField();
			dayLabel[i].setBackground(SystemColor.control);
			// dayLabel[i].setBackground(SystemColor.control);
			dayLabel[i].setForeground(Color.black);
			dayLabel[i].setFont(new java.awt.Font("宋体", Font.PLAIN, 16));
			dayLabel[i].setBorder(null);
			dayLabel[i].setEditable(false);
			dayLabel[i].setText("");
			dayLabel[i].setBounds(new Rectangle(115 + 42 * (i % 7),
					150 + 20 * (i / 7), 20, 15));
		}
		// 给这些显示日期的控件注册鼠标单击及双击事件
		for (int i = 0; i < 42; i++) {
			dayLabel[i].addMouseListener(new MouseAdapter() {
				public void mouseClicked(MouseEvent e) {
					int index = 66;
					for (int i = 0; i < 42; i++) {
						if (e.getSource().equals(dayLabel[i]))// 某个日期被选中
						{
							index = i;
							break;
						}

					}
					// 改变其它控件及被选中控件的背景色
					for (int j = 0; j < 42; j++) {
						if (j != index) {
							dayLabel[j].setBackground(SystemColor.control);
						} else
							continue;

					}
					if (!dayLabel[index].getText().equals("")) {
						dayLabel[index].setBackground(Color.PINK);
						DD.setText(dayLabel[index].getText());
					}
					// 注册双击事件
					if (e.getClickCount() == 2) {
						JOptionPane
								.showMessageDialog(null, YYYY.getText() + "年"
										+ MM.getText() + "月" + DD.getText()
										+ "日");
						dispose();

					}
				}
			});
		}

		contentPane.add(jButton1);
		contentPane.add(jButton2);
		contentPane.add(jLabel1);
		contentPane.add(DD);
		contentPane.add(jLabel2);
		contentPane.add(MM);
		contentPane.add(YYYY);
		contentPane.add(jLabel3);
		contentPane.add(jLabel4);
		contentPane.add(jLabel5);
		contentPane.add(jLabel6);
		for (int i = 0; i < 42; i++) {
			contentPane.add(dayLabel[i]);
		}

		contentPane.setVisible(true);
		setResizable(false);
		setVisible(true);
		month_num = (int) (now.get(Calendar.MONTH)); // 得到当前时间的月份

		year = (int) (now.get(Calendar.YEAR)); // 得到当前时间的年份
		System.out.println("Right now the year is :" + year + " month is "
				+ month_num);
		String toYYYY = new Integer(year).toString();
		String toMM = new Integer(month_num + 1).toString();// 计算机中的月份为0-11,所以实际显示时应加1
		YYYY.setText(toYYYY);
		MM.setText(toMM);
		DD.setText(new Integer(now.get(Calendar.DAY_OF_MONTH)).toString());

		first_day_num = use(year, month_num, 1);// 获取当月的第一天日期
		Resetday(first_day_num, year, month_num);// 初始化日期

	}

	/**
	 * This function is used for Painting.
	 * Component initialization.
	 * @param Graphics g
	 * @return 空
	 * @throws java.lang.Exception
	 */

	public void paint(Graphics g) {
		super.paint(g);
		g.drawRect(50, 60, 400, 50);
		g.drawRect(50, 130, 400, 220);
		g.setColor(Color.blue);
		g.fillRect(90, 140, 320, 30);
		g.setFont(new Font("Helvetica", Font.BOLD, 14));
		g.setColor(Color.black);
		String weekName[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
		for (int i = 0; i <= 6; i++) {
			g.drawString(weekName[i], 115 + i * 42, 160);
		}
	}
	/**
	 * This function is used to get the week number of the first day in the month.
	 * Component initialization.
	 * @param 年,月,日
	 * @return 整型,某年月第一天的星期
	 * 
	 */
	public int use(int reyear, int remonth, int day) {

		int week_num;
		now.set(reyear, remonth, day); // 设置时间为所要查询的年月的第一天
		week_num = (int) (now.get(Calendar.DAY_OF_WEEK));// 得到第一天的星期
		// System.out.println("in use:week_num is "+week_num);
		return week_num;
	}
	/**
	 * This function is used to reset the day.
	 * Component initialization.
	 * @param 年,月,日
	 * @return 空
	 * 
	 */
	public void Resetday(int week_log, int year_log, int month_log) {

		int month_day_score; // 存储月份的天数
		int count;
		month_day_score = 0;
		count = 1;
		Date date = new Date(year_log, month_log + 1, 1); // now
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.MONTH, -1); // 前个月
		month_day_score = cal.getActualMaximum(Calendar.DAY_OF_MONTH);// 最后一天
		for (int i = 0; i < 42; i++) { // 初始化标签
			dayLabel[i].setText("");
		}
		week_log = week_log + 6; // 将星期数加6,使显示正确
		month_day_score = month_day_score + week_log;
		for (int i = week_log - 7; i < month_day_score - 7; i++, count++) {
			dayLabel[i].setText(count + "");
		}
	}
	/**
	 * This function is used to reset the day and reset the display title.
	 * Component initialization.
	 * @param 年,月,日
	 * @return 空
	 * 
	 */
	public void clearAll(int thisYear, int thisMonth, int thisDay)// 刷新日期
	{
		int dayNum;
		String str = new Integer(thisYear).toString() + "-"
				+ new Integer(thisMonth).toString() + "-"
				+ new Integer(thisDay).toString();
		// System.out.println(str);
		if (isDate(str, "yyyy.MM.dd") | isDate(str, "yyyy-MM-dd"))// 合法日期
		{
			System.out.println("isdate!");
			String toYYYY = new Integer(thisYear).toString();
			String toMM = new Integer(thisMonth).toString();
			YYYY.setText(toYYYY);
			MM.setText(toMM);
			DD.setText(new Integer(thisDay).toString());
			dayNum = use(thisYear, thisMonth - 1, 1);
			Resetday(dayNum, thisYear, thisMonth - 1);
			for (int i = 0; i < 42; i++) {
				dayLabel[i].setBackground(SystemColor.control);
			}
			// isChecked = null;
		} else// 非法日期
		{
			System.out.println("notdate!");
		}
	}
	/**
	 * This function is used to judge if the date is validate.
	 * Component initialization.
	 * @param datefomat"YYYY-MM-DD" ,"YYYY.MM.DD"
	 * @return 合法返回true,非法返回false
	 * 
	 */
	//判断日期是否合法,合法返回true,否则返回false
	public static boolean isDate(String str_input, String rDateFormat) {
		if (!isNull(str_input)) {
			SimpleDateFormat formatter = new SimpleDateFormat(rDateFormat);
			formatter.setLenient(false);
			try {
				formatter.format(formatter.parse(str_input));
			} catch (Exception e) {
				return false;
			}
			return true;
		}
		return false;

	}
	/**
	 * This function is used to judge if the string is null.
	 * Component initialization.
	 * @param string str
	 * @return 空返回true,非空返回false
	 * 
	 */
	//判断字符是否空
	public static boolean isNull(String str) {
		if (str == null)
			return true;
		else
			return false;
	}
	
	//main函数
	public static void main(String[] args) {
		new CalendarFrame();
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -