java版的日历程序

//MainFrame.java

package com.huowolf.myCalender;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class MainFrame extends JFrame{
	private static final long serialVersionUID = 90464999L;

	JPanel panel = new JPanel(new BorderLayout());
	JPanel panel1 = new JPanel();
	JPanel panel2 = new JPanel(new GridLayout(7, 7));
	JPanel panel3 = new JPanel();

	JLabel[] labels = new JLabel[49];
	JLabel y_label = new JLabel("年份");
	JLabel m_label = new JLabel("月份");
	JComboBox<String> com1 = new JComboBox<String>();
	JComboBox<String> com2 = new JComboBox<String>();

	int re_year,re_mouth;
	int x_size,y_size;
	//得到一个当前时间的日历对象
	Calendar now = Calendar.getInstance();

	public MainFrame() {
		super("万年历");
		setSize(300, 300);
		//获取屏幕宽度
		x_size = (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth();
		//获取屏幕高度
		y_size = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight();
		setLocation((x_size - 300) / 2, (y_size - 350) / 2);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        panel1.add(y_label);
        panel1.add(com1);
        panel1.add(m_label);
        panel1.add(com2);

        for (int i = 0; i < 49; i++) {
            labels[i] = new JLabel("", JLabel.CENTER);// 将显示的字符设置为居中
            panel2.add(labels[i]);
        }

       panel3.add(new Clock(this));
        panel.add(panel1, BorderLayout.NORTH);
        panel.add(panel2, BorderLayout.CENTER);
        panel.add(panel3, BorderLayout.SOUTH);
        panel.setBackground(Color.white);
        panel1.setBackground(Color.white);
        panel2.setBackground(Color.white);
        panel3.setBackground(Color.white);

        init();
        com1.addActionListener(new ClockAction());
        com2.addActionListener(new ClockAction());
        setContentPane(panel);
        setVisible(true);
        //禁止拖动
        setResizable(false);
	}

	class ClockAction implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                int c_year, c_month, c_week;
                c_year = Integer.parseInt(com1.getSelectedItem().toString()); // 得到当前所选年份
                c_month = Integer.parseInt(com2.getSelectedItem().toString()) - 1; // 得到当前月份,并减1,计算机中的月为0-11
                c_week = use(c_year, c_month); // 调用函数use,得到星期几

                Resetday(c_week, c_year, c_month); // 调用函数Resetday
            }
        }

	public void init() {
        int year, month_num, first_day_num;
        String log[] = { "日", "一", "二", "三", "四", "五", "六" };

        for (int i = 0; i < 7; i++) {
            labels[i].setText(log[i]);
        }
        for (int i = 0; i < 49; i = i + 7) {
            labels[i].setForeground(Color.red); // 将星期日的日期设置为红色
        }
        for (int i = 6; i < 49; i = i + 7) {
            labels[i].setForeground(Color.green);// 将星期六的日期设置为绿色
        }
        for (int i = 1; i < 10000; i++) {
            com1.addItem("" + i);
        }
        for (int i = 1; i < 13; i++) {
            com2.addItem("" + i);
        }

        month_num = (int) (now.get(Calendar.MONTH)); // 得到当前时间的月份
        year = (int) (now.get(Calendar.YEAR)); // 得到当前时间的年份
        com1.setSelectedIndex(year - 1); // 设置下拉列表显示为当前年
        com2.setSelectedIndex(month_num); // 设置下拉列表显示为当前月
        first_day_num = use(year, month_num);
        Resetday(first_day_num, year, month_num);

	}

	  public int use(int reyear, int remonth) {
	        int week_num;
	        now.set(reyear, remonth, 1); // 设置时间为所要查询的年月的第一天
	        week_num = (int) (now.get(Calendar.DAY_OF_WEEK));// 得到第一天的星期
	        return week_num;
	    }

	  public void Resetday(int week_log, int year_log, int month_log) {
	        int month_day_score; // 存储月份的天数
	        int count =1;
	        month_day_score = 0;

	        Calendar cal = Calendar.getInstance();
	        /*cal.set(year_log+1900, month_log + 1, 1);
	        cal.add(Calendar.MONTH, -1); // 前个月
	        */
	        cal.set(year_log+1900, month_log, 1);
	        month_day_score = cal.getActualMaximum(Calendar.DAY_OF_MONTH);//得到一个月中最后一天

	        for (int i = 7; i < 49; i++) { // 初始化标签(除去前七个标签的下标值)
	            labels[i].setText("");
	        }

	        month_day_score = month_day_score + week_log;
	        for (int i = week_log; i < month_day_score; i++, count++) {
	            labels[i+6].setText(count + "");//加上前七个标签的下标值
	        }
	    }

	public static void main(String[] args) {
		 JFrame.setDefaultLookAndFeelDecorated(true);//为新创建的 JDialog提供其 Window 装饰的提示。
		 new MainFrame();

	}

}

//Clock.java

package com.huowolf.myCalender;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Clock extends Canvas implements Runnable{

	private static final long serialVersionUID = 82782L;
	private Thread t;
	private String time;

     public Clock (MainFrame mf){
    	    setSize(280,40);
    	    setBackground(Color.white);
    	    t=new Thread(this);                //实例化线程
    	    t.start();
	  }

	@Override
	public void run() {
		while(true) {
				try {
				Thread.sleep(1000);    			//休眠1秒钟
			} catch (InterruptedException e) {
				System.out.println("发生异常");
			}
			repaint(100);//在100毫秒内重绘组件
		}
	}

		public void paint(Graphics g) {
			Font f=new Font("宋体",Font.BOLD,16);
		    SimpleDateFormat SDF=new SimpleDateFormat("yyyy'年'MM'月'dd'日'HH:mm:ss");//格式化时间显示类型
		    Calendar now=Calendar.getInstance();
		    time=SDF.format(now.getTime());        //得到当前日期和时间
		    g.setFont(f);
		    g.setColor(Color.orange);
		    g.drawString(time,45,25);

		}
}

//很不错的程序,根据网络总结的,值得学习!

时间: 2024-08-26 01:27:33

java版的日历程序的相关文章

JAVA学习笔记-日历程序

package myCalendar; import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Scanner; /** * 可视化日历 * @author iwang

【JAVA版】Storm程序整合Kafka、Mongodb示例及部署

一.环境 一台Centos6.5主机 Mongo 3.0 Kafka_2.11-0.8.2.1 Storm-0.9.5 Zookeeper-3.4.6 java 1.7 (后因在mac上打包的jar由1.8编译没法儿运行,改为java 1.8) 其余环境暂略 二.运行启动 启动zookeeper 确认配置正确,配置相关可自行搜索. [[email protected] zookeeper-3.4.6]#pwd /data0/xxx/zookeeper-3.4.6 [[email protecte

java版转盘抽奖程序

最近抽空弄了个转盘抽奖程序,属于半原创,是基于网络上分享的资源二次开发的. 由于未知最初出处,也不知本人搜寻的资源是属于第几手,因此暂无法给出转载链接. ---------- 如果其他人要转载本文,请加上本文链接,毕竟这算本人二次开发的小作品. --------- 下载地址: http://yunpan.cn/cjG2P5kBfvQ6H  提取码 ff7d --------- 本程序 效果如图所示:

java版mosquitto客户端使用SSL功能的具体操作总结

在开发java版mosquitto客户端程序时需要使用paho库,如果开发的java客户端要用ssl功能,则需要Bouncy Castle库:在使用ssl功能时,需要证书文件进行进行身份认证,但在测试过程中,只自己制作ca并进行证书签发即可.在测试过程中首先创建一个统一的ca,该ca包括一个crt文件,一个key文件(例如ca.crt.ca.key):测试过程中,要使用该ca为每个测试的机子签发证书,例如:mosquitto服务器运行在192.168.4.223的linux机子上,java版的客

应用程序初次运行数据库配置小程序(Java版)

应用程序初始化数据库配置小程序 之前写过一个Java版的信息管理系统,但部署系统的时候还需要手动的去配置数据库和导入一些初始化的数据才能让系统运行起来,所以我在想是不是可以写一个小程序在系统初次运行的时候自动部署数据库和导入一些初始化数据.然后就有了以下的思路: 在应用程序入口处判断数据库是否已经配置完成,若配置完成则进入正常的登录系统完成正常操作即可,若未配置则进入数据库配置的小程序完成数据库配置然后再进入系统,但如何来判断是否已经配置完成呢,在这里我用的是比较原始的方法,配置数据库的时候系统

java版的QQ小程序

转载自:http://blog.csdn.net/lihongxun945/article/details/6114290 这是一个简单的java版的QQ小程序. 包括一个简单的服务器和一个简单的客户端. 运行时,先运行服务器,然后在运行客户端,就可以进行聊天了. 默认的配置是localhost,端口4545,更改ip就可以在两天电脑上进行聊天了. 目前不支持内网和外网之间的访问,也不支持多人聊天. 因为这只是一个简单的例子,感兴趣的同学可以通过改进,实现多人聊天和内外网之间的访问. 效果图:

0917 词法分析程序(java版)

1.程序说明: c语言和java两个版本的都做了一次,略作比较后觉得虽然用的语言不一样,但是中心思想都是一样的.本程序(java版)思路是先把源代码程序存入一个大字符串中, 然后分析该字符串,按照不同的词法分拆成一个个小字符串存到一个字符串数组中去,接着识别一些关键词,并对应相应的种别码,利用循环体一一列出.而对于c语言的 版本,笔者的思路是:由于C语言没有字符串类型,所以先把源代码输入到一个字符数组中去,然后按照词法截取单词或符号,逐一存到一个结构体数组中去,由于需要一 个个字符操作,要用到较

程序员必须掌握的8大排序算法(Java版)

程序员必须掌握的8大排序算法(Java版) 提交 我的评论 加载中 已评论 程序员必须掌握的8大排序算法(Java版) 2015-07-28 极客学院 极客学院 极客学院 微信号 jikexueyuan00 功能介绍 极客学院官方帐号,最新课程.活动发布.欢迎大家反馈问题哟^_^ 本文由网络资料整理而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空

Java版菠菜程序搭建BC网站项目开发给演示站包网小白的一些意见

Java版程序是目前世界上公认的高安全性扩展性最好,页面反馈速度极佳的BC网站搭建程序语言,在菲律宾,柬埔寨等东南亚国家,对Java版菠菜程序搭建的网站运营是由衷放心的特别是一些集团公司.在做BC网站项目之前,需要Q先分析3530自己的实际2742情况55,了解自己想要去做的具体方向,打算如何运营,团队如何去组建(网站一个人是运营不起来的),如果这些你都没有清楚的认识那我劝你还是别做了,应为做了对你来说没有具体的运营方向也就没办法运营好,运营不好的网站对你来说根本一文不值.考虑好了网站的运营方向