Java实现日历小程序【代码】
这个没啥难点的,主要是界面设计吧
界面就是这个样子

运行时请在src同目录下放上我女神的照片

-----------------------------------代码如下-----------------------------------
import java.awt.*;
import java.awt.event.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.*; public class MyCalendar extends JFrame{
/**
*
*/
private static final long serialVersionUID = 1193245796699646333L;
private JPanel imagePanel,datePanel,p,p2,p3;
private JLabel label,l,l2,l3,l4,l5;
private ImageIcon background;
private JButton b,b2;
private JTextField t;
private JComboBox<String> month_list = new JComboBox<String>();
private Font f = new Font("微软雅黑",Font.PLAIN,15);
private String columns[] = {"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
private Date now = new Date();
private JLabel[] day = new JLabel[42];
public MyCalendar(){
super("Calendar By XJX");
Image img=Toolkit.getDefaultToolkit().getImage("title.png");//窗口图标
setIconImage(img);
setSize(620,490);
setResizable(false);
setLayout(null);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //添加背景图片
background = new ImageIcon("background.jpg");
label = new JLabel(background);
label.setBounds(0, 0, this.getWidth(), this.getHeight());
imagePanel = (JPanel) this.getContentPane();
imagePanel.setOpaque(false);
this.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE)); //设置布局
l = new JLabel();
l.setFont(new Font("微软雅黑",Font.ITALIC,40));
l.setForeground(Color.red);//设置字体颜色
add(l);
l.setBounds(5, 5, 80, 45);
l2 = new JLabel();
l2.setFont(new Font("微软雅黑",Font.BOLD,20));
l2.setForeground(Color.red);//设置字体颜色
add(l2);
l2.setBounds(90, 10, 150, 40);
l3 = new JLabel();
l3.setFont(new Font("华文彩云",Font.BOLD,30));
l3.setForeground(Color.red);//设置字体颜色
add(l3);
l3.setBounds(500, 17, 100, 30); p = new JPanel();
add(p);
p.setBounds(5, 45, 600, 2);
p.setBorder(BorderFactory.createLineBorder(Color.black)); l4 = new JLabel("年份:");
add(l4);
l4.setBounds(10, 50, 80, 20);
l4.setFont(f);
t = new JTextField();
add(t);
t.setBounds(60, 50, 60, 20);
t.setFont(f);
l5 = new JLabel("月份:");
add(l5);
l5.setBounds(130, 50, 80, 20);
l5.setFont(f);
add(month_list);
month_list.setBounds(180, 50, 70, 20);
month_list.setFont(f);
month_list.setOpaque(false); for(int i = 0;i < 12;i++)
{
month_list.addItem(columns[i]);
}
b = new JButton("上个月");
add(b);
b.setBounds(430, 50, 80, 20);
b.setFont(f);
b.setOpaque(false);
b2 = new JButton("下个月");
add(b2);
b2.setBounds(520, 50, 80, 20);
b2.setFont(f);
b2.setOpaque(false); p2 = new JPanel();
add(p2);
p2.setBounds(15, 85, 580, 1);
p2.setBorder(BorderFactory.createLineBorder(Color.blue)); p3 = new JPanel();
p3.setOpaque(false);
add(p3);
p3.setBounds(5, 90, 600, 20);
p3.setLayout(new GridLayout(1,7,2,2));
JLabel[] week = new JLabel[7];
week[0] = new JLabel(" SUN");
week[1] = new JLabel(" MON");
week[2] = new JLabel(" TUE");
week[3] = new JLabel(" WED");
week[4] = new JLabel(" THU");
week[5] = new JLabel(" FRI");
week[6] = new JLabel(" SAT");
for(int i = 0;i < 7;i++)
{
week[i].setForeground(Color.black);//设置字体颜色
week[i].setFont(f);
p3.add(week[i]);
} datePanel = new JPanel();
datePanel.setOpaque(false);
add(datePanel);
datePanel.setBounds(5, 110, 610, 340);
datePanel.setLayout(new GridLayout(6,7,2,5)); for(int i = 0;i < 42;i++)
{
day[i] = new JLabel("");
day[i].setForeground(Color.red);//设置字体颜色
//day[i].setBorder(BorderFactory.createLineBorder(Color.black));
day[i].setFont(new Font("Jokerman",Font.BOLD,20));
datePanel.add(day[i]);
} Calendar cale = null;
cale = Calendar.getInstance();
cale.add(Calendar.MONTH, 0);
cale.set(Calendar.DAY_OF_MONTH, 1);
int dow = cale.get(Calendar.DAY_OF_WEEK);//获取本月第一天是星期几 cale = Calendar.getInstance();
cale.add(Calendar.MONTH, 1);
cale.set(Calendar.DAY_OF_MONTH, 0);
int maxDate = cale.get(Calendar.DAY_OF_MONTH);//获取本月有多少天
int ptr = 1;
int ptr2 = dow -1;
int today = now.getDate();
for(int i = 0;i < maxDate;i++)
{
day[ptr2].setText(" " + ptr);
if(ptr == today)
{
day[ptr2].setForeground(Color.black);
day[ptr2].setFont(new Font("Jokerman",Font.BOLD,35));
day[ptr2].setText(" " + ptr);
day[ptr2].setBorder(BorderFactory.createLineBorder(new Color(220,20,60)));
}
ptr++;
ptr2++;
} //初始化顶部信息
int m = now.getMonth() + 1;
l.setText("" + m);
//设置下拉列表的选中月份为当前月份
month_list.setSelectedIndex( m-1); switch (m) {
case 1:
l2.setText("January");
break;
case 2:
l2.setText("February");
break;
case 3:
l2.setText("March");
break;
case 4:
l2.setText("April");
break;
case 5:
l2.setText("May");
break;
case 6:
l2.setText("June");
break;
case 7:
l2.setText("July");
break;
case 8:
l2.setText("August");
break;
case 9:
l2.setText("September");
break;
case 10:
l2.setText("October");
break;
case 11:
l2.setText("November");
break;
case 12:
l2.setText("December");
break;
}
int y = now.getYear() + 1900;
l3.setText("" + y);
t.setText("" + y); //添加监听器
month_list.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){
Calendar cale = null;
String year;
boolean flag = true;
if(e.getStateChange() == ItemEvent.SELECTED)
{
year = t.getText();
if(year.equals(""))
{
JOptionPane.showMessageDialog(null,"年份不能为空!");
}
else
{
for(int i = 0;i < year.length();i++)
{
if(year.charAt(i) >= 48 && year.charAt(i) <= 57){}
else
{
JOptionPane.showMessageDialog(null,"请按照正确格式输入年份!");
flag = false;
break;
}
} if(flag)
{
String date = "";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
int y = Integer.valueOf(year).intValue();
int m = month_list.getSelectedIndex() + 1;
System.out.println(y);
System.out.println(m);
cale = Calendar.getInstance();
date = "" + year + "-" + m + "-" + 1;
try {
cale.setTime(format.parse(date));
} catch (ParseException e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
int dow = cale.get(Calendar.DAY_OF_WEEK);//获取本月第一天是星期几
System.out.println(dow); cale.roll(Calendar.DATE, -1);//日期回滚一天,也就是最后一天
int maxDate = cale.get(Calendar.DAY_OF_MONTH);//获取本月有多少天
System.out.println(maxDate);
int ptr = 1;
int ptr2 = dow -1;
int today = now.getDate();
//再重新设置内容前重置所有内容
for(int i = 0;i < 42;i++)
{
day[i].setText("");
day[i].setForeground(Color.red);//设置字体颜色
day[i].setFont(new Font("Jokerman",Font.BOLD,20));
day[i].setBorder(null);
} for(int i = 0;i < maxDate;i++)
{
day[ptr2].setText(" " + ptr);
if(ptr == today)
{
if(y == now.getYear() + 1900 && m == now.getMonth() +1)
{
day[ptr2].setForeground(Color.black);
day[ptr2].setFont(new Font("Jokerman",Font.BOLD,35));
day[ptr2].setText(" " + ptr);
day[ptr2].setBorder(BorderFactory.createLineBorder(new Color(220,20,60)));
}
}
ptr++;
ptr2++;
} //重置l,l2,l3的信息
l.setText("" + m);
switch (m) {
case 1:
l2.setText("January");
break;
case 2:
l2.setText("February");
break;
case 3:
l2.setText("March");
break;
case 4:
l2.setText("April");
break;
case 5:
l2.setText("May");
break;
case 6:
l2.setText("June");
break;
case 7:
l2.setText("July");
break;
case 8:
l2.setText("August");
break;
case 9:
l2.setText("September");
break;
case 10:
l2.setText("October");
break;
case 11:
l2.setText("November");
break;
case 12:
l2.setText("December");
break;
}
l3.setText("" + y);
}
}
}
}
}); //上个月
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Calendar cale = null;
String year;
boolean flag = true; year = t.getText();
if(year.equals(""))
{
JOptionPane.showMessageDialog(null,"年份不能为空!");
}
else
{
for(int i = 0;i < year.length();i++)
{
if(year.charAt(i) >= 48 && year.charAt(i) <= 57){}
else
{
JOptionPane.showMessageDialog(null,"请按照正确格式输入年份!");
flag = false;
break;
}
} if(flag)
{
String date = "";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
int y = Integer.valueOf(year).intValue();
int m = month_list.getSelectedIndex();
if(m==0)
{
m = 12;//1月往前就是去年12月
y -= 1;//去年
}
System.out.println(y);
System.out.println(m);
cale = Calendar.getInstance();
date = "" + year + "-" + m + "-" + 1;
try {
cale.setTime(format.parse(date));
} catch (ParseException e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
int dow = cale.get(Calendar.DAY_OF_WEEK);//获取本月第一天是星期几
System.out.println(dow); cale.roll(Calendar.DATE, -1);//日期回滚一天,也就是最后一天
int maxDate = cale.get(Calendar.DAY_OF_MONTH);//获取本月有多少天
System.out.println(maxDate);
int ptr = 1;
int ptr2 = dow -1;
int today = now.getDate();
//再重新设置内容前重置所有内容
for(int i = 0;i < 42;i++)
{
day[i].setText("");
day[i].setForeground(Color.red);//设置字体颜色
day[i].setFont(new Font("Jokerman",Font.BOLD,20));
day[i].setBorder(null);
} for(int i = 0;i < maxDate;i++)
{
day[ptr2].setText(" " + ptr);
if(ptr == today)
{
if(y == now.getYear() + 1900 && m == now.getMonth() +1)
{
day[ptr2].setForeground(Color.black);
day[ptr2].setFont(new Font("Jokerman",Font.BOLD,35));
day[ptr2].setText(" " + ptr);
day[ptr2].setBorder(BorderFactory.createLineBorder(new Color(220,20,60)));
}
}
ptr++;
ptr2++;
} //重置l,l2,l3的信息
t.setText("" + y);
l.setText("" + m);
//设置下拉列表的选中月份为当前月份
month_list.setSelectedIndex( m-1 );
switch (m) {
case 1:
l2.setText("January");
break;
case 2:
l2.setText("February");
break;
case 3:
l2.setText("March");
break;
case 4:
l2.setText("April");
break;
case 5:
l2.setText("May");
break;
case 6:
l2.setText("June");
break;
case 7:
l2.setText("July");
break;
case 8:
l2.setText("August");
break;
case 9:
l2.setText("September");
break;
case 10:
l2.setText("October");
break;
case 11:
l2.setText("November");
break;
case 12:
l2.setText("December");
break;
}
l3.setText("" + y);
}
}
}
}); //下个月
b2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Calendar cale = null;
String year;
boolean flag = true; year = t.getText();
if(year.equals(""))
{
JOptionPane.showMessageDialog(null,"年份不能为空!");
}
else
{
for(int i = 0;i < year.length();i++)
{
if(year.charAt(i) >= 48 && year.charAt(i) <= 57){}
else
{
JOptionPane.showMessageDialog(null,"请按照正确格式输入年份!");
flag = false;
break;
}
} if(flag)
{
String date = "";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
int y = Integer.valueOf(year).intValue();
int m = month_list.getSelectedIndex();
if(m==11)
{
m = 1;//12月往后就是明年1月
y += 1;//明年
}
else
{
m +=2;
}
System.out.println(y);
System.out.println(m);
cale = Calendar.getInstance();
date = "" + year + "-" + m + "-" + 1;
try {
cale.setTime(format.parse(date));
} catch (ParseException e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
int dow = cale.get(Calendar.DAY_OF_WEEK);//获取本月第一天是星期几
System.out.println(dow); cale.roll(Calendar.DATE, -1);//日期回滚一天,也就是最后一天
int maxDate = cale.get(Calendar.DAY_OF_MONTH);//获取本月有多少天
System.out.println(maxDate);
int ptr = 1;
int ptr2 = dow -1;
int today = now.getDate();
//再重新设置内容前重置所有内容
for(int i = 0;i < 42;i++)
{
day[i].setText("");
day[i].setForeground(Color.red);//设置字体颜色
day[i].setFont(new Font("Jokerman",Font.BOLD,20));
day[i].setBorder(null);
} for(int i = 0;i < maxDate;i++)
{
day[ptr2].setText(" " + ptr);
if(ptr == today)
{
if(y == now.getYear() + 1900 && m == now.getMonth() +1)
{
day[ptr2].setForeground(Color.black);
day[ptr2].setFont(new Font("Jokerman",Font.BOLD,35));
day[ptr2].setText(" " + ptr);
day[ptr2].setBorder(BorderFactory.createLineBorder(new Color(220,20,60)));
}
}
ptr++;
ptr2++;
} //重置l,l2,l3的信息
t.setText("" + y);
l.setText("" + m);
//设置下拉列表的选中月份为当前月份
month_list.setSelectedIndex( m-1 );
switch (m) {
case 1:
l2.setText("January");
break;
case 2:
l2.setText("February");
break;
case 3:
l2.setText("March");
break;
case 4:
l2.setText("April");
break;
case 5:
l2.setText("May");
break;
case 6:
l2.setText("June");
break;
case 7:
l2.setText("July");
break;
case 8:
l2.setText("August");
break;
case 9:
l2.setText("September");
break;
case 10:
l2.setText("October");
break;
case 11:
l2.setText("November");
break;
case 12:
l2.setText("December");
break;
}
l3.setText("" + y);
}
}
}
}); this.addKeyListener(new KeyMonitor());
p3.addKeyListener(new KeyMonitor());
t.addKeyListener(new KeyMonitor());
imagePanel.setFocusable(true);
imagePanel.addKeyListener(new KeyMonitor());
b.addKeyListener(new KeyMonitor());
b2.addKeyListener(new KeyMonitor());
month_list.addKeyListener(new KeyMonitor());
setVisible(true);
} class KeyMonitor extends KeyAdapter{
public void keyPressed(KeyEvent e){
int key = e.getKeyCode();
if(key == KeyEvent.VK_LEFT || key == KeyEvent.VK_RIGHT)
{
Calendar cale = null;
String year;
boolean flag = true; year = t.getText();
if(year.equals(""))
{
JOptionPane.showMessageDialog(null,"年份不能为空!");
}
else
{
for(int i = 0;i < year.length();i++)
{
if(year.charAt(i) >= 48 && year.charAt(i) <= 57){}
else
{
JOptionPane.showMessageDialog(null,"请按照正确格式输入年份!");
flag = false;
break;
}
} if(flag)
{
String date = "";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
int y = Integer.valueOf(year).intValue();
int m = month_list.getSelectedIndex(); if(key == KeyEvent.VK_LEFT)//前一个月
{
if(m==0)
{
m = 12;//1月往前就是去年12月
y -= 1;//去年
}
}
else if(key == KeyEvent.VK_RIGHT)//后一个月
{
if(m==11)
{
m = 1;//12月往后就是明年1月
y += 1;//明年
}
else
{
m +=2;
}
} System.out.println(y);
System.out.println(m);
cale = Calendar.getInstance();
date = "" + year + "-" + m + "-" + 1;
try {
cale.setTime(format.parse(date));
} catch (ParseException e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
int dow = cale.get(Calendar.DAY_OF_WEEK);//获取本月第一天是星期几
System.out.println(dow); cale.roll(Calendar.DATE, -1);//日期回滚一天,也就是最后一天
int maxDate = cale.get(Calendar.DAY_OF_MONTH);//获取本月有多少天
System.out.println(maxDate);
int ptr = 1;
int ptr2 = dow -1;
int today = now.getDate();
//再重新设置内容前重置所有内容
for(int i = 0;i < 42;i++)
{
day[i].setText("");
day[i].setForeground(Color.red);//设置字体颜色
day[i].setFont(new Font("Jokerman",Font.BOLD,20));
day[i].setBorder(null);
} for(int i = 0;i < maxDate;i++)
{
day[ptr2].setText(" " + ptr);
if(ptr == today)
{
if(y == now.getYear() + 1900 && m == now.getMonth() +1)
{
day[ptr2].setForeground(Color.black);
day[ptr2].setFont(new Font("Jokerman",Font.BOLD,35));
day[ptr2].setText(" " + ptr);
day[ptr2].setBorder(BorderFactory.createLineBorder(new Color(220,20,60)));
}
}
ptr++;
ptr2++;
} //重置l,l2,l3的信息
t.setText("" + y);
l.setText("" + m);
//设置下拉列表的选中月份为当前月份
// if(key == KeyEvent.VK_LEFT)//前一个月
// {
//
// }
// else if(key == KeyEvent.VK_RIGHT)//后一个月
// {
//
// }
month_list.setSelectedIndex( m-1 );
switch (m) {
case 1:
l2.setText("January");
break;
case 2:
l2.setText("February");
break;
case 3:
l2.setText("March");
break;
case 4:
l2.setText("April");
break;
case 5:
l2.setText("May");
break;
case 6:
l2.setText("June");
break;
case 7:
l2.setText("July");
break;
case 8:
l2.setText("August");
break;
case 9:
l2.setText("September");
break;
case 10:
l2.setText("October");
break;
case 11:
l2.setText("November");
break;
case 12:
l2.setText("December");
break;
}
l3.setText("" + y);
}
}
}
}
} public static void main(String args[]){
new MyCalendar();
}
}
Java实现日历小程序【代码】的更多相关文章
- Java可视化日历(Date类、DATe Format类、Calendar类综合运用),开发可视化日历小程序
Java时间日期类综合运用,开发可视化日历小程序 由键盘输入指定格式的日期,打印这个月的日历 1.代码 import java.text.DateFormat; import java.text.Pa ...
- 福利贴——爬取美女图片的Java爬虫小程序代码
自己做的一个Java爬虫小程序 废话不多说.先上图. 目录命名是用标签缩写,假设大家看得不顺眼能够等完成下载后手动改一下,比方像有强迫症的我一样... 这是挂了一个晚上下载的总大小,只是还有非常多由于 ...
- Calendar日历小程序
//有待完善,有点bugpackage com.sunshine.framework.calendar.model;import java.util.Calendar;/** * * <p> ...
- java 学习 ——计算器小程序
简易计算器小程序代码: package jisuanqi; //声明须要插入的包 import java.awt.*; import java.lang.Object; import java.lan ...
- Java 后端微信小程序支付demo (网上说的坑里面基本上都有)
Java 后端微信小程序支付 一.遇到的问题 1. 商户号该产品权限未开通,请前往商户平台>产品中心检查后重试 2.签名错误 3.已经调起微信统一下单接口,可以拿到预支付ID,但是前端支付的时候 ...
- 打造一款 刷Java 知识的小程序(二)
学习Java的神器已上线,面向广大Java爱好者! 之前写的一篇:打造一款 刷Java 知识的小程序(一) 一.第二版做了什么? 第一版小程序只具有初级展示功能,知识点都是hardcode在代码里面的 ...
- 小程序代码包压缩 策略&方案
微信小程序自推出以来,逐渐发展,目前正受到越来越多的青睐.其中很重要的一点得益于小程序的轻量级特性,每个小程序最多不超过2MB,招之即来挥之即去,相比于几十上百兆的APP,用户进入小程序,或者说,小程 ...
- 微信小程序代码构成
一.小程序代码 app.json 是当前小程序的全局配置,包括了小程序的所有页面路径.界面表现.网络超时时间.底部tab等. { "pages":[ "pages/ind ...
- 微信小程序代码片段
微信小程序代码片段是一种可分享的小项目,可用于分享小程序和小游戏的开发经验.展示组件和 API 的使用.复现开发问题等等.分享代码片段会得到一个链接,所有拥有此分享链接的人可以在工具中导入此代码片段. ...
随机推荐
- POJ3581 后缀数组
http://poj.org/problem?id=3581 这题说是给了N个数字组成的序列A1 A2 ..An 其中A1 大于其他的数字 , 现在要把序列分成三段并将每段分别反转求最小字典序 以后还 ...
- POJ3608
计算两个凸包之间的最小距离,旋转卡壳法详解在旋转卡壳的用法之计算两个凸 包上的最近距离 #include <iostream> #include<cstdio> #includ ...
- 【转】Redis之发布 订阅模式
本例包括 jedis_demo:入口类 jedis_control:jedis控制器(jedis的连接池) jedis_pub_sub_listener:订阅的监听器 singleton_agent: ...
- WSDL解析
背景 前面我们介绍过利用javassist动态生成webservice,这种方式可以使得我们系统通过页面配置动态发布webservice服务,做到0代码开发发布北向接口.进一步思考,我们如何0代码开发 ...
- MD5验签同一字符串得到不同的MD5签名值可能问题之一
public static String md555(String plainText) throws UnsupportedEncodingException { byte[] secretByte ...
- 使用 Laravel 数据填充生成 中文 测试数据
Laravel5.4 及更新版本设置了相关的配置项 app.faker_locale,只不过在文档和默认的配置文件中看不到这一参数.相关源码在 Illuminate\Database\Database ...
- jenkin环境搭建
Jenkins是一个用Java编写的开源的持续集成(CI)工具,可持续.自动地构建/测试软件项目,监控一些定时执行的任务.具有开源,支持多平台和插件扩展,安装简单,界面化管理等特点. 1.下载并解 ...
- 访问Hsql .data数据库文件
一.Hsql简介: hsql数据库是一款纯Java编写的免费数据库,许可是BSD-style的协议. 仅一个hsqldb.jar文件就包括了数据库引擎,数据库驱动,还有其他用户界面操作等内容.下载地址 ...
- js监听页面是否在浏览器当前页面
在最近的一个socket项目中,需要监听客户端是否已读客服端发送的消息. 这里用到了html5中document新增了一个事件 visibilitychange,这个事件在页面前台或后台切换时被触发, ...
- jquery的click无法触发事件
一个页面需要在加载后勾选table中所有行的checkbox,于是就这样写 $("table thead tr th input[type='checkbox']").click( ...