这是一个Java写的万年历,功能很简单。

JavaGUI万年历

源码

/**

* @#MyCalendar.jar 2010-8-25

* Copyright(c)Ice Spring 2010

*/

package util;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.FlowLayout;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

import java.util.GregorianCalendar;

import javax.swing.BorderFactory;

import javax.swing.JButton;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

/**

* Java万年历

* @author Ice Spring

* @version 1.0.0

*/

public class MyCalendar extends Thread implements MouseListener,ActionListener

{

private JFrame f;

private JComboBox yearCb,monCb;

private JLabel l1, l2,l3,l4,l5,l6,l7,l8,l9;

private JMenuBar mainMb;

private JMenuItem aboutMi,timeMi;

private JButton returnBt;

private JLabel[][] dayLb;

private String title = “Java万年历”;

/**

* 表示年份

*/

public static final int YEAR = 1 ;

/**

* 表示月份

*
与Java官方月份是从0开始的表示形式不同,这里的月份是从1开始的。

*/

public static final int MONTH = 2;

/**

* 表示某月中的某天(即年月日中的“日”)

*/

public static final int DAY_OF_MONTH= 3;

/**

* 表示星期几

*/

public static final int DAY_OF_WEEK = 9;

public MyCalendar()

{

this.load();

}

/**

* 构造方法

* @param title 标题

*/

public MyCalendar(String title)

{

this.title = title;

this.load();

}

/**

* 主流程控制方法

*/

private void load()

{

this.instantiate();

this.init();

this.setUI();

this.addAction();

this.start();

this.f.setVisible(true);

}

/**

* 实例化所有对象的方法

*/

private void instantiate()

{

this.f = new JFrame(title);

this.yearCb = new JComboBox();

this.monCb = new JComboBox();

this.returnBt = new JButton(“回到今天”);

this.l1 = new JLabel(“年”);

this.l2 = new JLabel(“月”);

this.l3 = new JLabel(“日”);

this.l4 = new JLabel(“一”);

this.l5 = new JLabel(“二”);

this.l6 = new JLabel(“三”);

this.l7 = new JLabel(“四”);

this.l8 = new JLabel(“五”);

this.l9 = new JLabel(“六”);

this.mainMb = new JMenuBar();

this.aboutMi = new JMenuItem(“关于”);

this.timeMi  = new JMenuItem(“”);

this.dayLb = new JLabel[5][7];

for(int i = 0; i<5;i++)

{

for(int j=0;j<7;j++)

{

this.dayLb[i][j] = new JLabel(“”);

}

}

}

/**

* 初始化方法

*/

private void init()

{

//设置年份下拉框

for(int i = 1900 ; i<=2038 ; i++)

{

this.yearCb.addItem(i);

}

this.yearCb.setSelectedItem(getNow(YEAR));

//设置月份下拉框

for(int i = 1;i<=12;i++)

{

this.monCb.addItem(i);

}

this.monCb.setSelectedItem(getNow(MONTH));

this.refresh();

}

/**

* 设置界面方法

*/

private void setUI()

{

this.f.setSize(300,300);

this.f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.f.setLocation(150,100);

this.f.setJMenuBar(this.mainMb);

this.mainMb.add(this.aboutMi);

this.mainMb.add(this.timeMi);

JPanel p1  = new JPanel();

p1.setLayout( new FlowLayout());

p1.add(this.yearCb);

p1.add(this.l1);

p1.add(this.monCb);

p1.add(this.l2);

p1.add(this.returnBt);

this.f.add(p1,BorderLayout.NORTH);

JPanel p2  =  new JPanel();

p2.setBorder(BorderFactory.createLineBorder(Color.GRAY, 1));

p2.setLayout(new GridLayout(6,7));

p2.add(l3);

p2.add(l4);

p2.add(l5);

p2.add(l6);

p2.add(l7);

p2.add(l8);

p2.add(l9);

for(int i = 0; i<5;i++)

{

for(int j=0;j<7;j++)

{

p2.add(this.dayLb[i][j]);

}

}

this.f.add(p2,BorderLayout.CENTER);

}

/**

* 添加动作方法

*/

private void addAction()

{

for(int i=0 ;i<5;i++)

{

for(int j = 0;j<7;j++)

{

this.dayLb[i][j].addMouseListener(this);

}

}

this.returnBt.addActionListener(this);

this.yearCb.addActionListener(this);

this.monCb.addActionListener(this);

this.aboutMi.addActionListener(this);

}

/**

* 线程执行方法

*/

public void run()

{

//死循环,每隔一秒刷新一次时间

for(;;)

{

this.timeMi.setText(“现在时间:”+new SimpleDateFormat(“HH:mm:ss”).format(new Date()));

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

/**

* 更新日历的方法

*/

private void refresh()

{

int year = Integer.parseInt(this.yearCb.getSelectedItem()+”");

int month = Integer.parseInt(this.monCb.getSelectedItem()+”");

int first = this.theFirstDay(year, month);

int days = this.getDaysOfMonth(year, month);

int z = 1;

//遍历每一个位置

for(int i = 0 ;i<35;i++)

{

//控制位置

int j = i/7;

int k = i%7;

//前几天是空的

if(i

{

this.dayLb[j][k].setText(“”);

}

//在该添加的地方添加

else if(i>(days+first-1))

{

this.dayLb[j][k].setText(“”);

}

//后几天也是空的

else

{

this.dayLb[j][k].setText((z++)+”");

}

}

this.changeColor(“this day”);

}

/**

* 改变日历颜色的方法

* @param text 需要改变的日期

*/

private void changeColor(String text)

{

//还原为原始颜色

for(int i=0 ;i<5;i++)

{

for(int j = 0;j<7;j++)

{

this.dayLb[i][j].setForeground(Color.BLACK);

}

}

//遍历日期数组

for(int i = 0;i<5;i++)

{

for(int j=0 ; j<7 ;j++)

{

//如果是当前月份的日历

if(this.yearCb.getSelectedItem().equals(this.getNow(MyCalendar.YEAR))&&this.monCb.getSelectedItem().equals(this.getNow(MyCalendar.MONTH)))

{

//将今天置为红色

if(this.dayLb[i][j].getText().equals(this.getNow(MyCalendar.DAY_OF_MONTH)+”"))

{

this.dayLb[i][j].setForeground(Color.RED);

}

}

//如果不是今天(红色)

if(this.dayLb[i][j].getForeground()!=Color.RED)

{

//而且是要改变的日期

if(this.dayLb[i][j].getText().equals(text))

{

//置为蓝色

this.dayLb[i][j].setForeground(Color.BLUE);

}

else

{

//什么也不做

}

}

}

}

}

/**

* 获取某月的第一天是星期几

* @param year 年

* @param month 月

* @return 星期几

*/

private int theFirstDay(int year , int month)

{

GregorianCalendar gc =new GregorianCalendar(year,month-1,1,1,1,1);

return gc.get(Calendar.DAY_OF_WEEK)-1;

}

/**

* 获取某个月的天数

* @param year 年

* @param month 月

* @return 这个月的天数

*/

private int getDaysOfMonth(int year , int month)

{

if( (year%4==0&&year%100!=0)||(year%400==0))

{

if(month == 2)

return 29;

}

if(month ==1||month ==3||month ==5||month ==7||month ==8||month ==10||month ==12)

{

return 31;

}

else if(month == 2) return 28;

else return 30;

}

/**

* 获取当前系统时间的某个部分,如年份,月份等等

*
目前可以提取到的部分:年、月、日、时、分、秒、毫秒、星期几

*
如果需要提取的部分不存在,则返回0

* @param type 需要获取的部分,这个常量可以从本类中获取

* @return int类型 获取到的部分
如果需要提取的部分不存在,则返回0

*/

public int  getNow(int type)

{

GregorianCalendar gc = new GregorianCalendar();

switch(type)

{

case MyCalendar.YEAR:

return gc.get(Calendar.YEAR);

case MyCalendar.MONTH:

return gc.get(Calendar.MONTH)+1;

case MyCalendar.DAY_OF_MONTH:

return gc.get(Calendar.DAY_OF_MONTH);

case MyCalendar.DAY_OF_WEEK:

return ((gc.get(Calendar.DAY_OF_WEEK))-1);

default : return 0;

}

}

/**

* 发生动作方法(ActionListener监听器)

*/

public void actionPerformed(ActionEvent arg0)

{

Object e = arg0.getSource();

if(e == this.returnBt)

{

this.yearCb.setSelectedItem(this.getNow(YEAR));

this.monCb.setSelectedItem(this.getNow(MONTH));

this.refresh();

}

else if(e instanceof JComboBox)

{

this.refresh();

}

else if(e == this.aboutMi)

{

JOptionPane.showMessageDialog(f, “这是一个使用Java写的最基本的万年历\n” +

“版本:1.0.0\n” +

“作者:Ice Spring\n” +

“主页:http://www.javaliang.com\n” +

“1.2版本将加入农历,敬请期待”, “关于Java万年历”, JOptionPane.INFORMATION_MESSAGE);

}

}

/**

* 鼠标单击方法(MouseListener监听器)

*/

public void mouseClicked(MouseEvent e1) {

Object e = e1.getSource();

if(e instanceof JLabel)

{

JLabel l = (JLabel)e;

this.changeColor(l.getText());

}

}

public void mouseEntered(MouseEvent arg0) {}

public void mouseExited(MouseEvent arg0) {}

public void mousePressed(MouseEvent arg0) {}

public void mouseReleased(MouseEvent arg0) {}

public static void main(String[] arg)

{

new MyCalendar();

}

}

java万年历JFrame_Java Gui万年历相关推荐

  1. (万年历一)JAVA在控制台输出万年历(1900年起)

    用Java实现在控制台输出指定年月的日历 纯算法写太麻烦?Calender对象写可香了: (万年历二)JAVA在控制台输出万年历(Calendar版) 控制台打印太难看?已更新js控制页面的啦版: ( ...

  2. java 简单万年历_java简单万年历

    Java万年历源代码_幼儿读物_幼儿教育_教育专区.. import java.awt.*; import java.awt.event.*; import javax.swing.*; import ...

  3. 万年历查询java项目查询,Java日历查询程序(万年历)

    Java日历查询程序(万年历) mip版  关注:259  答案:2  悬赏:10 解决时间 2021-01-25 03:09 已解决 2021-01-24 09:57 目标:创建一个包含万年历和备忘 ...

  4. Java课设之万年历

    用Java语言编写一个万年历,满足以下要求: (1)使用图形用户界面 (2)实现日期与星期的查询 package test; import java.awt.*; import javax.swing ...

  5. matlab 万年历,matlab时钟万年历 matlab时钟万年历(附word说明文档): 程序主要 联合开发网 - pudn.com...

    matlab时钟万年历 所属分类:图形图像处理 开发工具:matlab 文件大小:54KB 下载次数:6 上传日期:2018-08-24 21:54:23 上 传 者:小小葡萄123 说明:  mat ...

  6. Java图形开发--GUI

    Java图形开发--GUI 1.图形用户界面(gui)介绍 图形用户界面(Graphics User Interface,GUI)是用户与程序交互的窗口,比命令行的界面更加直观并且更好操作. awt, ...

  7. java中gui_java GUI 快速入门

    java 中编写 GUI 有两中工具包,分别为 AWT.Swing. Swing 是 AWT 的拓展,Swing 具有比 AWT 丰富的组件和方法. AWT 和 Swing 都能跨平台使用:AWT 会 ...

  8. java笔记(含gui)

    第一次java笔记(包含gui) bin 存放jdk的各种工具命令 javac和java存放在这个目录 conf 存放jdk的相关配置文件 include 存放一些平台特定的头文件 jmods 存放了 ...

  9. C语言 万年历 C语言 万年历

    C语言 万年历 C语言 万年历 ***************************************    2022    ********************************* ...

  10. 【Java】基于GUI的网络通信程序设计

    目录 一. 程序内容 二. 要求分析 三. 程序编写 0. 程序结构 1. 服务端程序的GUI设计 2. 服务端业务逻辑的编写 3. 为GUI界面绑定按钮事件 4. 将服务端的源码复制后,进行重构,并 ...

最新文章

  1. 两个ListBox中的项互相移动及上下移动
  2. 第十九课.隐马尔科夫模型
  3. Centos6.9安装Oracle11G(静默方式)
  4. 如何统计各个班级的相关数据(如班级排名、最高分等)呢?
  5. ScottGu之博客翻译-LINQ to SQL第四部分,更新数据库 LINQ to SQL (Part 4 - Updating our Database)...
  6. 单片机方波幅度调节c语言,为什么我用单片机做的频率可调的方波输出会有尖刺,而且会断...
  7. Veeam 发布 2022 年数据保护趋势报告,开发者需关注哪些点?
  8. psp中java,PSP编程概述
  9. 强化学习《基于策略价值 - Asynchronous Adventage Actor-Critic》
  10. matlab 信道模拟 差错概率,移动信道差错序列的分布概率模拟法及门限电平的讨论...
  11. Oracle Restart能够用来给Oracle GoldenGate 做 High Availability 使用么?
  12. iZotope系列音频软件如何卸载操作指南
  13. 析构函数中的virtual是否必要?
  14. 北京邮电大学计算机专业录取名单,祝福!“跪地谢母”考生被北京邮电大学计算机类专业录取...
  15. 获取基金数据python库_PYTHON爬取基金数据及基金筛选
  16. 首次适应算法 动态分区分配方式的模拟 C语言——课程设计实习
  17. eval函数和repr函数
  18. [转载]ExtJS中grid按照中文拼音首字母排序、改变行背景、列背景、静态数据分页不再困难...
  19. 技能冷却: 判断技能 释放技能
  20. centos下的vim安装

热门文章

  1. 五大常用算法之回溯法
  2. Matlab线型、标记、颜色表示代码
  3. Java word转pdf方法
  4. 苹果mac能安装计算机题库吗,苹果电脑能装windows系统吗_苹果电脑安装windows系统的方法...
  5. 江山如画 中国多少绝色
  6. java中使用unzip_unzip命令_Linux unzip命令用法示例详解
  7. 计算机论文的写作方法有哪些,计算机专业毕业论文的写作方法指导
  8. Mac m1 max 工具安装及简介
  9. axure后台示例_AxureUX中后台管理信息系统通用原型方案 v1.1
  10. linux oracle client 安装,Instant Client 下载 适用于 Linux x86-64(64 位)