//有待完善,有点bug
package com.sunshine.framework.calendar.model;

import java.util.Calendar;

/**
 *
 * <p>
 * 描述该类情况 {@link 代表跟谁有关系}
 * </p>
 *
 * @author 王超
 * @since 1.0
 * @date 2016年10月20日 下午8:19:15
 * @see 新建|修改|放弃
 * @see com.sunshine.framework.calendar.model.CalendarBean
 */

public class CalendarBean {
    String day[];
    int year = 2005, month = 0;

    public String[] getCalendar() {
        String a[] = new String[42];
        // 获取日历的实例对象
        Calendar date = Calendar.getInstance();
        // 设置日历日期
        date.set(this.year, this.month - 1, 1);
        // 获取周数
        int week = date.get(Calendar.DAY_OF_WEEK);
        int day = 0;
        // 判断大月份
        if (this.month == 1 || this.month == 3 || this.month == 5 || this.month == 7 || this.month == 8
                || this.month == 10 || this.month == 12) {
            day = 31;
        }
        // 判断小月
        if (this.month == 4 || this.month == 6 || this.month == 9 || this.month == 11) {
            day = 30;
        }
        // 单独判断2月
        if (this.month == 2) {
            // 判断是闰年 能被4或400整除 但不能被100整除
            if ((this.year % 4 == 0) || (this.year % 100 != 0) || (this.year % 400 == 0)) {
                day = 29;
            } else {
                day = 28;
            }
        }
        for (int i = week, n = 1; i < week + day; i++) {
            a[i] = String.valueOf(n);
            n++;
        }
        return a;
    }

    public int getMonth() {
        return this.month;
    }

    public int getYear() {
        return this.year;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public void setYear(int year) {
        this.year = year;
    }

}

package com.sunshine.framework.calendar;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.ScrollPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import com.sunshine.framework.calendar.model.CalendarBean;

/**
 *
 * <p>
 * 描述该类情况 {@link 代表跟谁有关系}
 * </p>
 *
 * @author 王超
 * @since 1.0
 * @date 2016年10月20日 下午8:41:58
 * @see 新建|修改|放弃
 * @see com.sunshine.framework.calendar.CalendarFrame
 */

public class CalendarFrame extends JFrame implements ActionListener {
    /***/
    private static final long serialVersionUID = 1L;
    JButton button = new JButton();
    CalendarBean calendar;
    JLabel labelDay[] = new JLabel[42];
    JLabel lbl1 = new JLabel("请输入年份:");
    JLabel lbl2 = new JLabel("");
    String name[] = { "日", "一", "二", "三", "四", "五", "六" };
    JButton nextMonth, previousMonth;
    JLabel showMessage = new JLabel("", JLabel.CENTER);
    JTextField text = new JTextField(10);
    JButton titleName[] = new JButton[7];
    int year = 1996, month = 1;

    public CalendarFrame() {
        JPanel pCenter = new JPanel();
        // 将pCenter的布局设置为7行7列的GridLayout布局
        pCenter.setLayout(new GridLayout(7, 7));
        // pCenter添加组件titleName[i]
        for (int i = 0; i < 7; i++) {
            // 把星期值存入到titleName数组里
            this.titleName[i] = new JButton(this.name[i]);
        }
        // pCenter添加组件labelDay[i]
        for (int i = 0; i < 42; i++) {
            this.labelDay[i] = new JLabel("", JLabel.CENTER);
            pCenter.add(this.labelDay[i]);
        }
        this.text.addActionListener(this);
        this.calendar = new CalendarBean();
        this.calendar.setYear(this.year);
        this.calendar.setMonth(this.month);
        String day[] = this.calendar.getCalendar();
        for (int i = 0; i < 42; i++) {
            this.labelDay[i].setText(day[i]);
        }
        this.nextMonth = new JButton("下月");
        this.previousMonth = new JButton("上月");
        this.button = new JButton("确定");
        // 注册监听器
        this.nextMonth.addActionListener(this);
        this.previousMonth.addActionListener(this);
        this.button.addActionListener(this);
        JPanel pNorth = new JPanel(), pSouth = new JPanel();
        pNorth.add(this.showMessage);
        pNorth.add(this.lbl2);
        pNorth.add(this.previousMonth);
        pNorth.add(this.nextMonth);
        pNorth.add(this.lbl1);
        pNorth.add(this.text);
        pNorth.add(this.button);
        this.showMessage.setText("日历:" + this.calendar.getYear() + "年" + this.calendar.getMonth() + "月");
        ScrollPane scrollPane = new ScrollPane();
        scrollPane.add(pCenter);
        // 窗口添加scrollPane在中心区域
        add(scrollPane, BorderLayout.CENTER);
        // 窗口添加pNorth 在北面区域
        add(pNorth, BorderLayout.NORTH);
        // 窗口添加pSouth 在南区域。
        add(pSouth, BorderLayout.SOUTH);
    }

    /*
     * (方法重写)
     *
     * @see
     * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == this.nextMonth) {
            this.month = this.month + 1;
            if (this.month > 12) {
                this.month = 1;
            }
            this.calendar.setMonth(this.month);
            String day[] = this.calendar.getCalendar();
            for (int i = 0; i < 42; i++) {
                this.labelDay[i].setText(day[i]);
            }
        } else if (e.getSource() == this.previousMonth) {
            this.month = this.month - 1;
            if (this.month < 1) {
                this.month = 12;
            }
            this.calendar.setMonth(this.month);
            String day[] = this.calendar.getCalendar();
            for (int i = 0; i < 42; i++) {
                this.labelDay[i].setText(day[i]);
            }
        } else {
            this.month = this.month + 1;
            if (this.month > 12) {
                this.month = 1;
            }
            this.calendar.setYear(Integer.parseInt(this.text.getText()));
            String day[] = this.calendar.getCalendar();
            for (int i = 0; i < 42; i++) {
                this.labelDay[i].setText(day[i]);
            }
        }
        this.showMessage.setText("日历:" + this.calendar.getYear() + "年" + this.calendar.getMonth() + "月");
    }
}

package com.sunshine.framework.calendar;

import javax.swing.JFrame;
import javax.swing.UIManager;

/**
 *
 * <p>
 * 描述该类情况 {@link 代表跟谁有关系}
 * </p>
 *
 * @author 王超
 * @since 1.0
 * @date 2016年10月20日 下午9:34:15
 * @see 新建|修改|放弃
 * @see com.sunshine.framework.calendar.CalendarMain
 */

public class CalendarMain {
    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        CalendarFrame frame = new CalendarFrame();
        frame.setBounds(100, 100, 360, 300);
        frame.setTitle("日历小程序");
        // 窗体居中显示
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

Calendar日历小程序的更多相关文章

  1. Java可视化日历(Date类、DATe Format类、Calendar类综合运用),开发可视化日历小程序

    Java时间日期类综合运用,开发可视化日历小程序 由键盘输入指定格式的日期,打印这个月的日历 1.代码 import java.text.DateFormat; import java.text.Pa ...

  2. Java实现日历小程序【代码】

    这个没啥难点的,主要是界面设计吧 界面就是这个样子 运行时请在src同目录下放上我女神的照片 -----------------------------------代码如下-------------- ...

  3. 微信小程序踩坑集合

    1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...

  4. 微信小程序——极点日历使用方法

    极点日历github项目地址 添加至自己的小程序方法 极点日历属性接口文档 代码实例: xml: <calendar calendar-style="calendar" he ...

  5. 微信小程序组件 日历

    js文件 'use strict'; let choose_year = null,   choose_month = null; const conf = {   data: {     hasEm ...

  6. 推荐简约漂亮的小程序插件 calendar

    公司团队制作,主要用于内部使用,觉得这个感觉不错,所以推荐出来,让大家试试~ 日历功能 日历基本功能,自定义样式 先睹为快 使用方法: 1. 在微信小程序管理后台--设置--第三方服务,按 AppID ...

  7. 微信小程序:手写日历组件

    一.前言 最近公司要做一个酒店入住的小程序,不可避免的一定会使用到日历,而小程序没有内置的日历组件.在网上看了一下也没有非常适合需求的日历,于是自己写了一个. 二.代码 1. 原理分析 写一个日历只需 ...

  8. 微信小程序+OLAMI(欧拉蜜)自然语言API接口制作智能查询工具--快递、聊天、日历等

    微信小程序最近比较热门,再加上自然语义理解也越来越被人关注,于是我想赶赶潮流,做一个小程序试试.想来想去快递查询应该是一种比较普遍的需求. 如果你也在通过自然语言接口做点什么,希望我的这篇博客能帮到你 ...

  9. 微信小程序横版日历,tab栏

    代码地址如下:http://www.demodashi.com/demo/14243.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...

随机推荐

  1. 关于Response.redirect()方法

    1. sendRedirect 后面要加上return.2. sendRedirect 执行过程是先转向还是先执行后续代码再转向?答: 先执行代码再转向,在一个sendRedirect后面不能再有其他 ...

  2. C# Datatable排序

    在C#中要对Datatable排序,可使用DefaultView的Sort方法.先获取Datatable的DefaultView,然后设置 得到的Dataview的sort属性,最后用视图的ToTab ...

  3. AJAX原理及XMLHttpRequest对象分析

    今天的主题是前端都了解的AJAX,但其中都有哪些知识点,还需要深入分析. 首先揭示AJAX的字面意思,Asynchronous Javascript And XML,通俗点就是“异步Javascrip ...

  4. 对list进行切片

    取一个list的部分元素是非常常见的操作.比如,一个list如下: >>> L = ['Adam', 'Lisa', 'Bart', 'Paul'] 取前3个元素,应该怎么做? 笨办 ...

  5. 【转】基于 CoreText 实现的高性能 UITableView

    引起UITableView卡顿比较常见的原因有cell的层级过多.cell中有触发离屏渲染的代码(譬如:cornerRadius.maskToBounds 同时使用).像素是否对齐.是否使用UITab ...

  6. 关于队列queue

    1.在多线程和多进程中都有queue.调用方式不同,使用方式一致: 线程中: import queue q = queue.Queue(maxsize = 2) 进程中: from multiproc ...

  7. 微信浏览器禁止页面下拉查看网址(不影响页面内部scroll)

    此类事件是手机touchmove默认事件行为,可以通过js代码隐藏事件: $(‘body’).on(‘touchmove’, function (event) {event.preventDefaul ...

  8. vi全局替换

    http://blog.csdn.net/vindak/article/details/7830547 vi全局替换命令

  9. wkwebview a target="_blank" 打不开链接的解决方案

    - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigatio ...

  10. Linux的硬链接为何不能链接目录

    Linux中的目录文件是特殊的文件,其中的数据是一个关联列表的,像c++中的map,或者Python中的dict,保存每个文件名(包括子目录,Linux中一切皆文件!)到iNode的映射.iNode本 ...