package com.itany.test01;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class MyKalendar extends JFrame implements ItemListener,Runnable{
private JLabel nameLabel = new JLabel("懒猫:");
private JLabel yearLabel = new JLabel("年份:");
private JLabel monthLabel = new JLabel("月份:");
private JComboBox yearBox = new JComboBox();
private JComboBox monthBox = new JComboBox();
private JLabel timeLabel = new JLabel();
private JLabel[] dayLabel = new JLabel[49];
private Calendar c = Calendar.getInstance(); //获得日期对象
public MyKalendar() {
init();
}
private void init() {
this.setTitle("懒猫--万年历 蓝猫送");
this.setSize(300,330);
// this.setIconImage(new ImageIcon("cat.jpg"));
int width = (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth(); //得到屏幕的宽
int height = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight(); //得到屏幕的高
this.setLocation((width-300)/2, (height-350)/2);
//上部
JPanel jp = new JPanel();
jp.add(nameLabel);
jp.add(yearLabel);
jp.add(yearBox);
jp.add(monthLabel);
jp.add(monthBox);
//中部
JPanel jp1 = new JPanel();
// jp1.setOpaque(true);
jp1.setLayout(new GridLayout(7, 7)); //用网格布局
for(int i=0;i<49;i++)
{
dayLabel[i] = new JLabel("",JLabel.CENTER); //初始化49个标签
jp1.add(dayLabel[i]);
}
//底部
timeLabel = new JLabel("",JLabel.CENTER);
timeLabel.setForeground(Color.red);
timeLabel.setFont(new Font("宋体",Font.BOLD,15));
initData();
this.getContentPane().add(jp,"North");
this.getContentPane().add(jp1);
this.getContentPane().add(timeLabel,"South");
this.setDefaultCloseOperation(3);
this.setResizable(false);
this.setVisible(true);
}
//初始化数据
private void initData()
{
String[] weeks = {"日","一","二","三","四","五","六","七"};
for(int i=1949;i<2114;i++)
{
yearBox.addItem(i+"");//添加年份
}
for(int i=1;i<13;i++)
{
monthBox.addItem(i+""); //添加月份
}
for(int i=0;i<7;i++)
{
dayLabel[i].setText(weeks[i]); //添加星期
}
for(int i=0;i<49;i=i+7)
{
dayLabel[i].setForeground(Color.red); //星期日和星期六设置前景色
}
for(int i=6;i<49;i=i+7)
{
dayLabel[i].setForeground(Color.red);
}
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
yearBox.setSelectedItem(year+""); //设置默认年份
monthBox.setSelectedItem(month+1+""); //设置默认月份 要加 1
int week = getWeek(year, month); //得到莫个月份的第一天的星期数
resetDay(year, month+1, week); //
monthBox.addItemListener(this); //下拉框添加监听事件
new Thread(this).start(); //启动线程 调用日期
}
//得到星期
private int getWeek(int year,int month)
{
c.set(year, month, 1);
return c.get(Calendar.DAY_OF_WEEK);
}
//刷新当前日期
private void resetDay(int year,int month,int week)
{
int symbol = 0;
int dayOfMonth = 0;
int count = 1;
if(year%4==0 && year%100!=0 || year%400 == 0) //判断润年
{
symbol = 1;
}
switch(month)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12: dayOfMonth=31;break;
case 4: case 6: case 9: case 11: dayOfMonth=30;break;
case 2:
if(symbol == 1){dayOfMonth=29;}
else{dayOfMonth=28;}
}
// System.out.println(c.get(Calendar.DAY_OF_MONTH));
int start = week+6; //+6 去除前面 的星期
int end = dayOfMonth+start;
for(int i=7;i<49;i++)
{
dayLabel[i].setText(""); //重新初始化标签
}
for(int i=start;i<end;i++,count++)
{
dayLabel[i].setText(count+"");
}
}
@Override
public void itemStateChanged(ItemEvent e) {
int year = Integer.parseInt(yearBox.getSelectedItem().toString());
int month = Integer.parseInt(monthBox.getSelectedItem().toString());
int week = getWeek(year, month-1);
resetDay(year, month, week);
}
@Override
public void run() {
while(true)
{
c = Calendar.getInstance();
String time = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss").format(c.getTime()); //格式化日期对象
timeLabel.setText(time);
try {
Thread.currentThread().sleep(1000); //线程 暂停一秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new MyKalendar();
}
}