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. codevs 1017 乘积最大

    1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描 ...

  2. Mesh绘制雷达图(UGUI)

    参考资料:http://www.cnblogs.com/jeason1997/p/5130413.html ** 描述:雷达图 刷新 radarDate.SetVerticesDirty(); usi ...

  3. IIS 内部运行机制及Asp.Net执行过程详解

    一直以来对一个Asp.net页面穿过IIS后就返回给浏览器一个HTML页面感觉很是神奇.虽然做技术这么长时间了,也曾经大致了解过一点来龙去脉,但是如果你真的问起我比较详细的过程,我还真的回答不上来,好 ...

  4. EMV规范 ---ISO7816 T=0协议的时间特性

    复位应答期间: 字符间的时间间隔最小是12etu,最大是9600etu,但整个ATR不得超过19200etu(TS的起始沿到最后一个字符的起始沿 从卡片发出的连续字符其最小时间间隔为12etu,但是终 ...

  5. 【HDOJ】1208 Pascal's Travels

    记忆化搜索.注意当除右下角0外,其余搜索到0则返回. #include <algorithm> #include <cstdio> #include <cstring&g ...

  6. [Poetize I]守卫者的挑战

    描述 Description 打开了黑魔法师Vani的大门,队员们在迷宫 般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过.“我,Nizem,是黑魔法圣殿的守卫者.如果 ...

  7. 【转】HashSet的用法

    原文网址:http://blog.csdn.net/aidesudi/article/details/4720201 Java代码 public class TestHashSet { public  ...

  8. oracle事务和锁

    数据库事务概括 1. 说明 一组SQL,一个逻辑工作单位,执行时整体修改或者整体回退. 2.事务相关概念 1)事务的提交和回滚:COMMIT/ROLLBACK 2)事务的开始和结束 开始事务:连接到数 ...

  9. cf590A Median Smoothing

    A. Median Smoothing time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  10. HDU 3016 Man Down (线段树+dp)

    HDU 3016 Man Down (线段树+dp) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...