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. Ubiquitous Religions

    http://poj.org/problem?id=2524 这道题就是并查集. #include<cstdio> #include<cstring> #include< ...

  2. java正则表达式一:基本使用

    java正则表达式主要涉及三个类:java.util.regex.Matcher.java.util.regex.Pattern.java.util.regex.PatternSyntaxExcept ...

  3. 使用Windows 系统性能监控来报警磁盘空间不足

    http://blog.csdn.net/jiangxinyu/article/details/4370288

  4. Markdown和reStructuredText语法比较

    reStructuredText在线编辑器 http://rst.ninjs.org/ ReST是Docutils的标记语法,Docutils是Python世界的文档工具集.也因为这样ReST在Pyt ...

  5. mysqldump 一些参数体验

    mysqldump -uroot -p'xxx' -R --single-transaction --master-data=2 zjzc>$TODAY_DIR/zjzc/zjzc_${TODA ...

  6. treap启发式合并

    注意输入v要在建根的前面. #include <cstdio> #include <iostream> #include <algorithm> #include ...

  7. (2015年郑州轻工业学院ACM校赛题) A 彩票

    这是个简单的题目,其实就是判断是否是偶数, 对二进行特判一下就行了! 比赛时候我们还错两次................ 一看简单题就想抢一血,谁知到第一次提交CE, 再提交WA 汗........ ...

  8. (转载)Python 列表(list)操作

    (转载)http://blog.csdn.net/facevoid/article/details/5338048 创建列表sample_list = ['a',1,('a','b')] Python ...

  9. Hot to get clicked cell column in DevExpress XtraGrid

    To accomplish this task, use the GridView.RowCellClickevent. Please note that this event will not fi ...

  10. 如何创建WIN服务

    sc create ServiceName binPath= "XXXX.exe" displayName= "中文xxxx"binpath和displayna ...