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 的使用.复现开发问题等等.分享代码片段会得到一个链接,所有拥有此分享链接的人可以在工具中导入此代码片段. ...
随机推荐
- Groovy中的闭包
Closures(闭包) 本节主要讲groovy中的一个核心语法:closurs,也叫闭包.闭包在groovy中是一个处于代码上下文中的开放的,匿名代码块.它可以访问到其外部的变量或方法. 1. 句法 ...
- js 变量 作用域及内存
由于Javascript是松散型的,所以其变量只是在特定时间用于保存特定值的一个名字而已,并不存在某个变量必须保存某种类型的值的规则,变量的值以及其数据类型都可以在脚本的声明周期内改变 一.基本类型与 ...
- bzoj1689 / P1589 [Usaco2005 Open] Muddy roads 泥泞的路
P1589 [Usaco2005 Open] Muddy roads 泥泞的路 简单的模拟题. 给水坑排个序,蓝后贪心放板子. 注意边界细节. #include<iostream> #in ...
- HTML 和 JavaScript 编写简单的 404 界面
编写简单的 404 界面,也可以用来做 500 报错界面,还会飘东西,特别好,蛮漂亮的! <!DOCTYPE html> <html> <head> <met ...
- tensorflow mnist 给一张手写字辨别
https://www.jianshu.com/p/db2afc0b0334 https://blog.csdn.net/xxzhangx/article/details/54563574
- Python3基础 print , 输出多个数据
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Linux文件时间详解ctime、mtime、atime【转】
本文转载自:http://blog.csdn.net/doiido/article/details/43792561 Linux系统文件有三个主要的时间属性,分别是 ctime(change time ...
- Java 多线程中的任务分解机制-ForkJoinPool,以及CompletableFuture
ForkJoinPool的优势在于,可以充分利用多cpu,多核cpu的优势,把一个任务拆分成多个“小任务”,把多个“小任务”放到多个处理器核心上并行执行:当多个“小任务”执行完成之后,再将这些执行结果 ...
- HDU 2841 Visible Trees(容斥)题解
题意:有一块(1,1)到(m,n)的地,从(0,0)看能看到几块(如果两块地到看的地方三点一线,后面的地都看不到). 思路:一开始是想不到容斥...后来发现被遮住的地都有一个特点,若(a,b)有gcd ...
- Stream API
引例: 1 List<String> strList = Arrays.asList("zhaojigang","nana","tiany ...