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. oracle中字符串的大小比较,字符串与数字的比较和运算

    Oracle比较字符串是根据ASCII码来的,第一个字母的ASCII大小比较如果相等再比较下一个,类推.字符串和数字进行操作是会报异常的,因为类型不一样不能进行比较. Oracle在执行SQL的时候有 ...

  2. 001Spring4.2基本环境搭建

    1:工程目录以及依赖jar包如下,如果缺少某些jar包在weblogic控制台下面会有提示 2:applicationContext.xml配置文件 <?xml version="1. ...

  3. poj 1364

    http://poj.org/problem?id=1364 #include<cstdio> #include<cstring> #include<algorithm& ...

  4. 测试Flask+PYTHON的WEB框架

    参数URL: http://blog.csdn.net/qwiwuqo/article/details/8970621 安装flask之前,你必须要先安装python和easy_install. 安装 ...

  5. 【HDOJ】1558 Segment set

    并查集+计算几何. /* 1558 */ #include <cstdio> #include <cstring> #include <cstdlib> #defi ...

  6. 【HDOJ】2510 符号三角形

    暴力打表. #include <cstdio> ]={,,,,,,,,,,,,,,,,,,,,,,,,}; int main() { while (scanf("%d" ...

  7. 双向队列 STL

    题目描述 想想双向链表……双向队列的定义差不多,也就是说一个队列的队尾同时也是队首:两头都可以做出队,入队的操作.现在给你一系列的操作,请输出最后队列的状态:命令格式:LIN X  X表示一个整数,命 ...

  8. COJ 0538 购物问题

    购物问题 难度级别:C: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 由于换季,ACM商场推出优惠活动,以超低价格出售若干种商品.但是,商场 ...

  9. LeetCode——Two Sum

    Given an array of integers, find two numbers such that they add up to a specific target number. The ...

  10. 第1章 Python介绍

    本章将包含Python的介绍,安装以及Python的数据类型及运算符.其中关于数据类型中的字符串.列表.元组和字典后续章节会着重介绍. 1.1 为什么学Python Python是一门简明并强大的面向 ...