java万年历JFrame_Java Gui万年历
这是一个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万年历相关推荐
- (万年历一)JAVA在控制台输出万年历(1900年起)
用Java实现在控制台输出指定年月的日历 纯算法写太麻烦?Calender对象写可香了: (万年历二)JAVA在控制台输出万年历(Calendar版) 控制台打印太难看?已更新js控制页面的啦版: ( ...
- java 简单万年历_java简单万年历
Java万年历源代码_幼儿读物_幼儿教育_教育专区.. import java.awt.*; import java.awt.event.*; import javax.swing.*; import ...
- 万年历查询java项目查询,Java日历查询程序(万年历)
Java日历查询程序(万年历) mip版 关注:259 答案:2 悬赏:10 解决时间 2021-01-25 03:09 已解决 2021-01-24 09:57 目标:创建一个包含万年历和备忘 ...
- Java课设之万年历
用Java语言编写一个万年历,满足以下要求: (1)使用图形用户界面 (2)实现日期与星期的查询 package test; import java.awt.*; import javax.swing ...
- matlab 万年历,matlab时钟万年历 matlab时钟万年历(附word说明文档):
程序主要 联合开发网 - pudn.com...
matlab时钟万年历 所属分类:图形图像处理 开发工具:matlab 文件大小:54KB 下载次数:6 上传日期:2018-08-24 21:54:23 上 传 者:小小葡萄123 说明: mat ...
- Java图形开发--GUI
Java图形开发--GUI 1.图形用户界面(gui)介绍 图形用户界面(Graphics User Interface,GUI)是用户与程序交互的窗口,比命令行的界面更加直观并且更好操作. awt, ...
- java中gui_java GUI 快速入门
java 中编写 GUI 有两中工具包,分别为 AWT.Swing. Swing 是 AWT 的拓展,Swing 具有比 AWT 丰富的组件和方法. AWT 和 Swing 都能跨平台使用:AWT 会 ...
- java笔记(含gui)
第一次java笔记(包含gui) bin 存放jdk的各种工具命令 javac和java存放在这个目录 conf 存放jdk的相关配置文件 include 存放一些平台特定的头文件 jmods 存放了 ...
- C语言 万年历 C语言 万年历
C语言 万年历 C语言 万年历 *************************************** 2022 ********************************* ...
- 【Java】基于GUI的网络通信程序设计
目录 一. 程序内容 二. 要求分析 三. 程序编写 0. 程序结构 1. 服务端程序的GUI设计 2. 服务端业务逻辑的编写 3. 为GUI界面绑定按钮事件 4. 将服务端的源码复制后,进行重构,并 ...
最新文章
- 两个ListBox中的项互相移动及上下移动
- 第十九课.隐马尔科夫模型
- Centos6.9安装Oracle11G(静默方式)
- 如何统计各个班级的相关数据(如班级排名、最高分等)呢?
- ScottGu之博客翻译-LINQ to SQL第四部分,更新数据库 LINQ to SQL (Part 4 - Updating our Database)...
- 单片机方波幅度调节c语言,为什么我用单片机做的频率可调的方波输出会有尖刺,而且会断...
- Veeam 发布 2022 年数据保护趋势报告,开发者需关注哪些点?
- psp中java,PSP编程概述
- 强化学习《基于策略价值 - Asynchronous Adventage Actor-Critic》
- matlab 信道模拟 差错概率,移动信道差错序列的分布概率模拟法及门限电平的讨论...
- Oracle Restart能够用来给Oracle GoldenGate 做 High Availability 使用么?
- iZotope系列音频软件如何卸载操作指南
- 析构函数中的virtual是否必要?
- 北京邮电大学计算机专业录取名单,祝福!“跪地谢母”考生被北京邮电大学计算机类专业录取...
- 获取基金数据python库_PYTHON爬取基金数据及基金筛选
- 首次适应算法 动态分区分配方式的模拟 C语言——课程设计实习
- eval函数和repr函数
- [转载]ExtJS中grid按照中文拼音首字母排序、改变行背景、列背景、静态数据分页不再困难...
- 技能冷却: 判断技能 释放技能
- centos下的vim安装
热门文章
- 五大常用算法之回溯法
- Matlab线型、标记、颜色表示代码
- Java word转pdf方法
- 苹果mac能安装计算机题库吗,苹果电脑能装windows系统吗_苹果电脑安装windows系统的方法...
- 江山如画 中国多少绝色
- java中使用unzip_unzip命令_Linux unzip命令用法示例详解
- 计算机论文的写作方法有哪些,计算机专业毕业论文的写作方法指导
- Mac m1 max 工具安装及简介
- axure后台示例_AxureUX中后台管理信息系统通用原型方案 v1.1
- linux oracle client 安装,Instant Client 下载 适用于 Linux x86-64(64 位)