package MyCal;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import javax.swing.JSpinner;
import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener; import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Calendar; import javax.swing.JLabel;
import java.awt.Color; public class MyCal { private JFrame frame; /**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MyCal window = new MyCal();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
} /**
* Create the application.
*/
public MyCal() {
initialize();
} /**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();//基本窗口框架
frame.setBounds(100, 100, 569, 417);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel1 = new JPanel();//上面的面板
frame.getContentPane().add(panel1, BorderLayout.NORTH); JSpinner spinner = new JSpinner();//年份微调
spinner.setModel(new SpinnerNumberModel(2016, 1970, 2100, 1));
panel1.add(spinner); JComboBox comboBox = new JComboBox();//月份微调
comboBox.setModel(new DefaultComboBoxModel(new String[] {"\u4E00\u6708", "\u4E8C\u6708", "\u4E09\u6708", "\u56DB\u6708", "\u4E94\u6708", "\u516D\u6708", "\u4E03\u6708", "\u516B\u6708", "\u4E5D\u6708", "\u5341\u6708", "\u5341\u4E00\u6708", "\u5341\u4E8C\u6708"}));
comboBox.setMaximumRowCount(12);
panel1.add(comboBox); JPanel panel3 = new JPanel();//下面面板
frame.getContentPane().add(panel3, BorderLayout.SOUTH); JLabel label1 = new JLabel("选择一个年份或月份日历开始启动");//添加label说明
label1.setForeground(Color.RED);
panel3.add(label1); JPanel panel2 = new JPanel();//中间面板,主面板
frame.getContentPane().add(panel2, BorderLayout.CENTER);
panel2.setLayout(new GridLayout(7, 7, 0, 0)); ItemPolice itemPolice1=new ItemPolice();//new一个监视器
itemPolice1.setCal(spinner, comboBox,panel2,label1);//组合
itemPolice1.show();//显示开始日历
comboBox.addItemListener(itemPolice1);//下拉项添加监视器
spinner.addChangeListener(itemPolice1);//微调添加监视器
}
} class CalendarHuang{
int year,month;
void setYearAndMonth(int a,int b){
year=a;
month=b;
}
String[] getCalendar(){
String []a=new String[42];
Calendar Calender1=Calendar.getInstance();
Calender1.set(year, month-1,1);
int weekday=Calender1.get(Calender1.DAY_OF_WEEK)-1;
// System.out.println(month);
int day = 0;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
day=31;
}else if(month==4||month==6||month==9|month==11)
day=30;
else if(month==2){
if(year%4==0&&year%100!=0||year%400==0)
day=29;
else
day=28;
}
for(int i=0;i<weekday;i++)
a[i]=" ";
for(int i=weekday,n=1;i<weekday+day;i++){
a[i]=String.valueOf(n);
n++;
}
for(int i=weekday+day;i<a.length;i++){
a[i]=" ";
}
return a;
}
} class ItemPolice implements ItemListener,ChangeListener,ActionListener{//实现ItemListener接口的类
JSpinner combo1;//微调项
JComboBox combo2;//下拉项
JPanel panel2;//主面板
JLabel label1;//说明标签
String day[]=new String[42];//天数
CalendarHuang cal1=new CalendarHuang();//日历类
int year=2016,month=1;//开始值
void show(){//开始先有一个月份
String s1[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
for(int i=0;i<7;i++){
panel2.add(new JLabel(s1[i]));
}
cal1.setYearAndMonth(year, month);
day=cal1.getCalendar();
for(int i=0;i<day.length;i++){
panel2.add(new JButton(day[i]));
}
}
void setCal(JSpinner combox1,JComboBox combox2,JPanel panel2,JLabel label1){//组合
this.combo1=combox1;
this.combo2=combox2;
this.panel2=panel2;
this.label1=label1;
}
public void itemStateChanged(ItemEvent e){//下拉事件
panel2.removeAll();
panel2.revalidate();
panel2.getParent().repaint();
month=combo2.getSelectedIndex()+1;
String s1[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
for(int i=0;i<7;i++){
panel2.add(new JLabel(s1[i]));
}
cal1.setYearAndMonth(year, month);
day=cal1.getCalendar();
for(int i=0;i<day.length;i++){
JButton button2=new JButton(day[i]);
button2.addActionListener(this);
panel2.add(button2);
}
}
public void stateChanged(ChangeEvent e) {//微调事件
panel2.removeAll();
panel2.revalidate();
panel2.getParent().repaint();
year=Integer.parseInt(combo1.getValue().toString());
String s1[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
for(int i=0;i<7;i++){
panel2.add(new JLabel(s1[i]));
}
cal1.setYearAndMonth(year, month);
day=cal1.getCalendar();
for(int i=0;i<day.length;i++){
JButton button2=new JButton(day[i]);
button2.addActionListener(this);
panel2.add(button2);
}
}
public void actionPerformed(ActionEvent e) {//按钮事件
String s=e.getActionCommand();
label1.setText("日期是:"+year+" 年 "+month+" 月 "+s+" 日");
}
}

gui小日历的更多相关文章

  1. 一个小巧,也很nice的“小日历”--一个Android App

    一个小巧也很Nice的“小日历” 背景 因为,常用日历记一些事情,Android自带的日历,如果有事情,会显示一个小点,然后点击进去后才能看到事情的具体内容,不是很方便. 所以,写了一个“小日历” 特 ...

  2. 基于Vue的小日历(支持按周切换)

      基于Vue的日历小功能,可根据实际开发情况按每年.每月.每周.进行切换 <template> <div class="date"> <!-- 年份 ...

  3. autoit获取ie浏览器简单操作网页(GUI小工具)

    需要稍稍熟悉一下autoti提供的语言, 我简单做了一个带GUI的小工具,实现根据IE标题点击页面内的LinkText 注意:使用时IE窗口是显示状态才可以获取到(可以在脚本中加入搜索IE句柄,将ie ...

  4. javascript 小日历

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...

  5. python 爬取糗事百科 gui小程序

    前言:有时候无聊看一些搞笑的段子,糗事百科还是个不错的网站,所以就想用Python来玩一下.也比较简单,就写出来分享一下.嘿嘿 环境:Python 2.7 + win7 现在开始,打开糗事百科网站,先 ...

  6. linux下用gtk+写比赛赌博GUI小游戏

    游戏界面全部由gtk的GUI完成,没有使用openGL之类的高端货. 游戏玩法就是8位选手比赛跑步,你可以在赛前赌哪位选手会赢,如果输了cash会被扣除,反之cash会增加. 无聊写了3个选项:小数时 ...

  7. GUI小程序---理解GUI

    package com.gui; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent ...

  8. 删除UTF-8 BOM头的GUI小工具

    经常看到PHP群里有人因为UTF-8的BOM头出现这样那样的问题,给出的一个PHP删除BOM头的程序,新手也不会用,所以用wxpython写了一 个GUI,直接选择文件夹路径,就可以将该文件夹下所有指 ...

  9. Java小日历

    自己写的一个小小日历.执行程序是柯自己主动定位到当前年月日,当点击下个月button是会定位到下个月的这一天,就是说天数不会变.当在一个月中点击某一天时,以下的时间也会随时变化. import jav ...

随机推荐

  1. Tr A

    Problem Description A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input 数据的第一行是一个T,表示有T组数据. 每组数据的第 ...

  2. 把 图片 资源文件 编译到dll

    今天盘古 lucene的改了下.然后 里面有很多文件 . 还有一些 生成多音字的 汉语词典等. 索性一下子编译到dll里面 . 就不在项目里面设置 这些文件的目录了 然后找了下.愣是没找到. 后来发现 ...

  3. Scala开启之旅

    嘿嘿,公司最近需要测试SPARK性能,赶上了.. 那LUA之后,SCALA也简单看看,,, 其实,我三月时买了本129元的SPARK的书,,全国只那一本哈. package com.hengheng. ...

  4. API Hook完全手册

    文章来源: http://blog.csdn.net/atfield 原文作者: ATField 整理日期: 2008-07-16 发表评论 字体大小: 小 中 大   注:本文是根据我两年前写的一个 ...

  5. -_-#【Canvas】measureText, translate, drawImage

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. -_-#微信内置JavaScript API WeixinJSBridge

    微信相关的 js 操作:分享.网络.菜单 微信内置JsAPI之WeixinJSBridge微信WeixinJSBridge API续

  7. LoadRunner基础入门教程

    原文地址:http://jingyan.baidu.com/article/215817f7dedfb01eda1423df.html 从LoadRunner英语字面上进行理解就是负载跑步者,为什么这 ...

  8. date命令使用总结【转载】

    本文转载自:http://blog.sina.com.cn/s/blog_674b5aae0100o0w9.html 由于跨年.跨月.闰平年等特殊性,在日常编程过程中对日期的处理总是异常麻烦.目前,各 ...

  9. 《Linear Algebra and Its Applications》-chaper1-向量方程、矩阵方程和线性方程组

    向量: 向量的基本运算:向量的运算最基本的一件事情,就是基于它n个分量上进行,即对于两个分量的向量a = <a1,a2>,b = <b1,b2>,有a + b = <a1 ...

  10. web前端面试试题总结---javascript篇

    JavaScript 介绍js的基本数据类型. Undefined.Null.Boolean.Number.String. ECMAScript 2015 新增:Symbol(创建后独一无二且不可变的 ...