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 的使用.复现开发问题等等.分享代码片段会得到一个链接,所有拥有此分享链接的人可以在工具中导入此代码片段. ...
随机推荐
- discuz完善用户资料任务不能完成的解决方法
再来吐槽下discuz. 虽然很很很不想用discuz,但是,,,,..便利性以及各种原因,还得使用. 问题:discuz-运营-任务-完善资料,,,,,,变更部分后无法完成任务. 解决方式如下 原因 ...
- Multinoulli distribution
https://www.statlect.com/probability-distributions/multinoulli-distribution3 Multinoulli distributio ...
- 最近整理出了有关大数据,微服务,分布式,Java,Python,Web前端,产品运营,交互等1.7G的学习资料,有视频教程,源码,课件,工具,面试题等等。这里将珍藏多年的资源免费分享给各位小伙伴们
大数据,微服务,分布式,Java,Python,Web前端,产品运营,交互 领取方式在篇尾!!! 基础篇.互联网架构,高级程序员必备视频,Linux系统.JVM.大型分布式电商项目实战视频...... ...
- Java求解迷宫问题:栈与回溯算法
摘要: 使用栈的数据结构及相应的回溯算法实现迷宫创建及求解,带点JavaGUI 的基础知识. 难度: 中级 迷宫问题是栈的典型应用,栈通常也与回溯算法连用. 回溯算法的基本描述是: (1) 选择一个 ...
- Filter过滤器与Session会话跟踪技术
Filter过滤器 适用场景 1.为web应用程序的新功能建立模型(可被添加到web应用程序中或者从web应用程序中删除而不需要重写基层应用程序代码)2.用户授权Filter:负责检查用户请求,根据请 ...
- php array_multisort对数据库结果多个字段进行排序
php array_multisort对数据库结果多个字段进行排序$data 数组中的每个单元表示一个表中的一行.这是典型的数据库记录的数据集合. 例子中的数据如下:volume | edition ...
- 【JavaScript】数组随机排序 之 Fisher–Yates 洗牌算法
Fisher–Yates随机置乱算法也被称做高纳德置乱算法,通俗说就是生成一个有限集合的随机排列.Fisher-Yates随机置乱算法是无偏的,所以每个排列都是等可能的,当前使用的Fisher-Yat ...
- [转载]LinkButton跳转页面及传递参数
在DataList中使用LinkButton按钮(LinkButtonDelete),该按钮用于链接跳转到删除页面.在模板中双击该按钮,跳转到.cs页面.问题是我们如何获得该条信息的ID,如果不知道I ...
- selinux配置错误实例介绍
错误原因 配置关闭SELinux,结果误操作 应修改配置文件/etc/selinux/config中的“SELINUX”参数的值, # SELINUX=enforcing 原始配置 SELINUX= ...
- Python Web学习笔记之SOCK_STREAM和SOCK_DGRAM
SOCK_STREAM 数据流 一般是tcp/ip协议的编程 有保障的(即能保证数据正确传送到对方)面向连接的SOCKET,多用于资料(如文件)传送 SOCK_DGRAM 数据包 udp协议网络编程 ...