先贴代码,之后的文章慢慢总结分析。

首先是日历的每个格子作为一个对象,建立的一个类DayBox.java

import java.awt.Color;

import javax.swing.JButton;

//方格类,

public class DayBox

{

//属性

int year;

int month;//月份1-12

int day;

int week;//星期1-7

JButton Labelday;

//初始化

public DayBox()

{

Labelday=new JButton();

Labelday.setBackground(Color.pink);//背景颜色默认为分红

}

//设置年

public void SetYear(int year)

{

this.year=year;

}

//设置月

public void SetMonth(int month)

{

this.month=month;

}

//设置日

public void SetDay(int day)

{

this.day=day;

}

//设置星期

public void SetWeek(int week)

{

this.week=week;

}

//标签显示日期

public void ShowDay()

{

Labelday.setText(this.day+"");

}

//设置颜色

public void setColor(Color color)

{

this.Labelday.setBackground(color);

}

//设置日期

public void setText(String str)

{

this.Labelday.setText(str);

}

}

然后是界面类Layout.java

import java.awt.Color;

import java.awt.GridLayout;

import java.util.ArrayList;

//布局

public class Layout

{

//网格布局

GridLayout gridlayout;

//保存格子

ArrayList daylist=new ArrayList();

public Layout()

{

gridlayout=new GridLayout(6,7);

}

//构建daybox

public ArrayList GetDayBoxList(int year,int month)

{

int count=1;//标志第几个格子

int daycount=1;//标志日期

boolean tag=false;//标志是否找到第一个对应的格子

int monthday=this.getMonthDay(year, month);//本月的天数

//找出这一年这一月的第一天是星期几

int y,m;

int d=1;

y=year;

if (month == 1) m=13;

else if (month == 2) m=14;

else m=month;

int week = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7 + 1;

while(count<=35)

{

//找到

if((week==count||tag==true)&&daycount<=monthday)

{

DayBox box=new DayBox();

box.SetDay(daycount);

box.SetMonth(month);

box.SetWeek(week);

box.SetYear(year);

box.ShowDay();

tag=true;

daylist.add(box);

count++;

daycount++;

}

//未找到

else{

DayBox box=new DayBox();

box.setColor(Color.GRAY);

daylist.add(box);

count++;

}

}

return daylist;

}

//获得一个月有多少天

public int getMonthDay(int year,int month)

{

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

return 31;

else if(month==2)

{//判断闰年

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

return 29;

else return 28;

}

else return 30;

}

}

再是一个主界面构造类MainFrame.java

import java.awt.Color;

import java.awt.Toolkit;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import javax.swing.JButton;

import javax.swing.JFrame;

/**

*

* @author lkxiaolou

* 主界面类

*

*/

public class MainFram {

int year,month,day;

int y,m,d;

JFrame mainwindow=new JFrame();

//构造方法

public MainFram()

{

//获得现在时间,年月

Date date=new Date();

SimpleDateFormat yf=new SimpleDateFormat("yyyy");

SimpleDateFormat mf=new SimpleDateFormat("MM");

SimpleDateFormat df=new SimpleDateFormat("dd");

year = Integer.parseInt(yf.format(date));

month = Integer.parseInt(mf.format(date));

day = Integer.parseInt(df.format(date));

//复制一份

this.y=year;

this.m=month;

this.d=day;

//第一次显示界面

this.setCalendar(year, month);

mainwindow.setLocationRelativeTo(null);//设置居中

//设置图标

mainwindow.setIconImage(Toolkit.getDefaultToolkit().createImage("ico.png"));

//添加监听

mainwindow.addKeyListener(new KeyListen());

}

//按键适配

class KeyListen extends KeyAdapter

{

@Override

public void keyPressed(KeyEvent e) {

switch(e.getKeyCode())

{

//左方向键月份减小

case KeyEvent.VK_LEFT:

if(m>=2)

{

m--;

setCalendar(y, m);

}

else

{

y--;

m=12;

setCalendar(y, m);

}

break;

//右方向键月份增加

case KeyEvent.VK_RIGHT:

if(m<=11)

{

m++;

setCalendar(y, m);

}

else

{

y++;

m=1;

setCalendar(y, m);

}

break;

//上方向键年增加

case KeyEvent.VK_UP:

y++;

setCalendar(y, m);

break;

//下方向键年减少

case KeyEvent.VK_DOWN:

if(y>=0)

{

y--;

setCalendar(y, m);

}

break;

//空格键返回今天

case KeyEvent.VK_SPACE:

y=year;

m=month;

setCalendar(y, m);

break;

}

}

}

//构造日历

public void setCalendar(int year,int month)

{

int count;

ArrayList list;

//设置布局

Layout layout=new Layout();

//取消布局并清空控件

mainwindow.setLayout(null);

mainwindow.getContentPane().removeAll();

//重新布局

mainwindow.setLayout(layout.gridlayout);

list=layout.GetDayBoxList(year, month);

//载入布局

mainwindow.setLayout(layout.gridlayout);

//填入第一行

for(count=1;count<=7;count++)

{

DayBox titlebox=new DayBox();

titlebox.setColor(Color.PINK);

if(count==1) titlebox.setText("一");

else if(count==2) titlebox.setText("二");

else if(count==3) titlebox.setText("三");

else if(count==4) titlebox.setText("四");

else if(count==5) titlebox.setText("五");

else if(count==6) titlebox.setText("六");

else if(count==7) titlebox.setText("日");

mainwindow.add(titlebox.Labelday);

}

//填充剩余方格

for(count=0;count

{

JButton btn=list.get(count).Labelday;

//显示今天

if(btn.getText().isEmpty()==false)

{

if(this.year==year&&this.month==month&&day==Integer.parseInt(btn.getText()))

btn.setBackground(Color.RED);

}

mainwindow.add(btn);

}

//设置显示方式

mainwindow.setSize(700, 500);

mainwindow.setVisible(true);

mainwindow.setResizable(false);

mainwindow.setTitle(""+year+"年"+month+"月");

//重新获得焦点

mainwindow.requestFocus();

}

}

最后是入口Calendar.java

public class Calendar {

/**

* @param args

*/

public static void main(String[] args) {

MainFram calendar=new MainFram();

}

}

贴个图(方向键上下换年,左右换月,空格回到当前)

总结下这个小项目不足的地方:

1.界面不好看,这个么,也没什么心思去美化,再者是功能简单,每月只显示了当月的日期,一般的日历需要显示与这个月紧接的上个月和下个月的几天,填满空格。

2.没有弄阴历和节日,也没有可以跳到任何一天的功能,主要还是界面设计比较费神。

3.代码注释写的不规范,类设置的有些不合理。

4.很多代码从网上找的和自己写的,比如Calendar类就没用,显得比较乱,有些类的构造方法写的太长。

java做一个日历程序_java实现的一个简单日历相关推荐

  1. Java俄罗斯方块,老程序员花了一个周末,连接中学年代!

    Java俄罗斯方块,老程序员花了一个周末,连接中学年代! 热门专栏推荐 [1]Java小游戏(俄罗斯方块.飞机大战.植物大战僵尸等) [2]JavaWeb项目实战(图书管理.在线考试.宿舍管理等) [ ...

  2. java ee的小程序_Java EE调度程序

    java ee的小程序 Java EE应用程序服务器具有本机调度支持,并且在大多数应用程序中,不需要包括外部依赖项,例如著名的Quartz调度程序库. Java EE 6和7完整配置文件上提供的Jav ...

  3. java ee的小程序_Java EE应用程序的单片到微服务重构

    java ee的小程序 您是否曾经想过将现有的Java EE单体应用程序重构为基于微服务的应用程序需要做什么? 该博客说明了一个简单的购物车示例如何转换为基于微服务的应用程序,以及围绕它的一些担忧. ...

  4. java ee的小程序_Java EE 8 –为更多设备提供更多应用程序

    java ee的小程序 如果我不喜欢夏天的一件事,那就是事实是没有太多要分享或谈论的新闻. 谁决定将Java Day Tokyo置于今年的这个无聊的时间里,做得很好,并给了我一个写关于新的和即将到来的 ...

  5. java随机安排座位表程序_java – 为长凳生成随机座位表的最有效算法?

    我正在为一位教师的家庭成员编写应用程序.她要求一个应用程序,允许她进入一群孩子,设定他们的惯用手,设置他们不能坐在旁边的人,指定每个工作台有多少个座位,然后为孩子们生成一个随机的布局,这样就没有了 – ...

  6. java用什么开发程序_java用来开发什么程序比较多

    java用来开发什么程序比较多 发布时间:2020-04-30 11:22:27 来源:亿速云 阅读:508 作者:小新 今天小编给大家分享的是java用来开发什么程序比较多,相信很多人都不太了解,为 ...

  7. 用java实现一个计算器程序_1.2第一个java程序——hello world

    第一个java程序--hello world 实现一个java程序,主要有三个步骤:1.编写源代码,2.编译源代码,3.运行.java的源代码必须先编译,然后才能由JVM解析执行.所以我们程序员第一步 ...

  8. java类和对象程序_Java类与对象程序设计基础

    Java类与对象程序设计基础 一.实验目的: 通过编制一个独立应用程序,使得学生掌握Java的系统所提供类的引用方法:通过编制一个完整的应用程序,使得学生对Java的应用程序的基本构成和基本算法熟练掌 ...

  9. 用java写秋道程序_Java开发者使用C++写程序踩的坑

    笔者是一个很矛盾的人.平时用Java.但是一开始学习的时候学的是汇编语言,而且对C语言也很熟悉.为什么不学C++呢?是因为我可以完全用Java的编码规范去写C++.因此我不需要了解更多的诸如C++的命 ...

最新文章

  1. CES现场低调的主线,近在咫尺的5G商业化 | CES2018技术趋势
  2. Airtest自动化测试工具介绍
  3. Linux下装完mysql后默认密码是多少
  4. 论文浅尝 | 一种可解释的语义匹配复值网络
  5. 台式计算机总是重启,台式电脑经常自动重启怎么修复
  6. 编程心得体会_生信编程语言的经验之谈
  7. openwrt固件_openwrt固件
  8. MPLS(多协议标记交换)协议能否降低跨省组建企业专网的成本?
  9. android 渲染yuv数据,Android opengl渲染yuv420例子
  10. 为什么要使用英英词典?
  11. sql添加字段和字段说明
  12. 华为是怎样研发的(10)——知识管理
  13. Linux系统自动校准时间
  14. python 推箱子实验开发报告_推箱子游戏详细设计报告
  15. jQuery 实现小米手风琴图片案例
  16. godot引擎学习6
  17. 黑苹果Mac系统快捷键修改
  18. 如何在网页中屏蔽右键
  19. 13-反向传播法求梯度
  20. 亲测UEFI启动模式的电脑安装Win10和Ubuntu双系统(dell笔记本和hp笔记本)

热门文章

  1. 使用连接管理器出现“安装程序无法复制文件”错误的解决方法
  2. rabbitMQ-server控制台安装报错启动失败,黑窗口一闪即过Applying plugin configuration to rabbit .. failed.
  3. 冬令营Web基础整理——Day2
  4. java的 %3c%3c 运算符_scanf(%3c%3c, a, b)
  5. 解决iOS 证书不受信任的问题
  6. 笔记本光驱在计算机里不显示器,笔记本dvd光驱怎么播放蓝光_电脑如何播放蓝光碟图文步骤...
  7. VmatrixOJ--[Loop]移动小球
  8. web安全入门之SQL注入-时间型盲注
  9. 关于储备(应急储备、管理储备、储备分析)的总结讨论
  10. 中国电信天翼物联品牌升级,注智产业数字化