java万年历JFrame_Java Gui万年历

java万年历JFrame_Java Gui万年历这是一个Java写的万年历,功能很简单。JavaGUI万年历源码/***@#MyCalendar.jar2010-8-25*Copyright(c)IceSpring2010*/packageutil;importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.FlowLayout;importjava.awt…

这是一个Java写的万年历,功能很简单。

100825142179f9b9340f35fae6.png.thumb_.jpg

JavaGUI万年历

源码

/**

* @#MyCalendar.jar 2010-8-25

* Copyright(c)Ice Spring 2010

*/

package util;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.FlowLayout;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

import java.util.GregorianCalendar;

import javax.swing.BorderFactory;

import javax.swing.JButton;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

/**

* Java万年历

* @author Ice Spring

* @version 1.0.0

*/

public class MyCalendar extends Thread implements MouseListener,ActionListener

{

private JFrame f;

private JComboBox yearCb,monCb;

private JLabel l1, l2,l3,l4,l5,l6,l7,l8,l9;

private JMenuBar mainMb;

private JMenuItem aboutMi,timeMi;

private JButton returnBt;

private JLabel[][] dayLb;

private String title = “Java万年历”;

/**

* 表示年份

*/

public static final int YEAR = 1 ;

/**

* 表示月份

*
与Java官方月份是从0开始的表示形式不同,这里的月份是从1开始的。

*/

public static final int MONTH = 2;

/**

* 表示某月中的某天(即年月日中的“日”)

*/

public static final int DAY_OF_MONTH= 3;

/**

* 表示星期几

*/

public static final int DAY_OF_WEEK = 9;

public MyCalendar()

{

this.load();

}

/**

* 构造方法

* @param title 标题

*/

public MyCalendar(String title)

{

this.title = title;

this.load();

}

/**

* 主流程控制方法

*/

private void load()

{

this.instantiate();

this.init();

this.setUI();

this.addAction();

this.start();

this.f.setVisible(true);

}

/**

* 实例化所有对象的方法

*/

private void instantiate()

{

this.f = new JFrame(title);

this.yearCb = new JComboBox();

this.monCb = new JComboBox();

this.returnBt = new JButton(“回到今天”);

this.l1 = new JLabel(“年”);

this.l2 = new JLabel(“月”);

this.l3 = new JLabel(“日”);

this.l4 = new JLabel(“一”);

this.l5 = new JLabel(“二”);

this.l6 = new JLabel(“三”);

this.l7 = new JLabel(“四”);

this.l8 = new JLabel(“五”);

this.l9 = new JLabel(“六”);

this.mainMb = new JMenuBar();

this.aboutMi = new JMenuItem(“关于”);

this.timeMi  = new JMenuItem(“”);

this.dayLb = new JLabel[5][7];

for(int i = 0; i<5;i++)

{

for(int j=0;j<7;j++)

{

this.dayLb[i][j] = new JLabel(“”);

}

}

}

/**

* 初始化方法

*/

private void init()

{

//设置年份下拉框

for(int i = 1900 ; i<=2038 ; i++)

{

this.yearCb.addItem(i);

}

this.yearCb.setSelectedItem(getNow(YEAR));

//设置月份下拉框

for(int i = 1;i<=12;i++)

{

this.monCb.addItem(i);

}

this.monCb.setSelectedItem(getNow(MONTH));

this.refresh();

}

/**

* 设置界面方法

*/

private void setUI()

{

this.f.setSize(300,300);

this.f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.f.setLocation(150,100);

this.f.setJMenuBar(this.mainMb);

this.mainMb.add(this.aboutMi);

this.mainMb.add(this.timeMi);

JPanel p1  = new JPanel();

p1.setLayout( new FlowLayout());

p1.add(this.yearCb);

p1.add(this.l1);

p1.add(this.monCb);

p1.add(this.l2);

p1.add(this.returnBt);

this.f.add(p1,BorderLayout.NORTH);

JPanel p2  =  new JPanel();

p2.setBorder(BorderFactory.createLineBorder(Color.GRAY, 1));

p2.setLayout(new GridLayout(6,7));

p2.add(l3);

p2.add(l4);

p2.add(l5);

p2.add(l6);

p2.add(l7);

p2.add(l8);

p2.add(l9);

for(int i = 0; i<5;i++)

{

for(int j=0;j<7;j++)

{

p2.add(this.dayLb[i][j]);

}

}

this.f.add(p2,BorderLayout.CENTER);

}

/**

* 添加动作方法

*/

private void addAction()

{

for(int i=0 ;i<5;i++)

{

for(int j = 0;j<7;j++)

{

this.dayLb[i][j].addMouseListener(this);

}

}

this.returnBt.addActionListener(this);

this.yearCb.addActionListener(this);

this.monCb.addActionListener(this);

this.aboutMi.addActionListener(this);

}

/**

* 线程执行方法

*/

public void run()

{

//死循环,每隔一秒刷新一次时间

for(;;)

{

this.timeMi.setText(“现在时间:”+new SimpleDateFormat(“HH:mm:ss”).format(new Date()));

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

/**

* 更新日历的方法

*/

private void refresh()

{

int year = Integer.parseInt(this.yearCb.getSelectedItem()+””);

int month = Integer.parseInt(this.monCb.getSelectedItem()+””);

int first = this.theFirstDay(year, month);

int days = this.getDaysOfMonth(year, month);

int z = 1;

//遍历每一个位置

for(int i = 0 ;i<35;i++)

{

//控制位置

int j = i/7;

int k = i%7;

//前几天是空的

if(i

{

this.dayLb[j][k].setText(“”);

}

//在该添加的地方添加

else if(i>(days+first-1))

{

this.dayLb[j][k].setText(“”);

}

//后几天也是空的

else

{

this.dayLb[j][k].setText((z++)+””);

}

}

this.changeColor(“this day”);

}

/**

* 改变日历颜色的方法

* @param text 需要改变的日期

*/

private void changeColor(String text)

{

//还原为原始颜色

for(int i=0 ;i<5;i++)

{

for(int j = 0;j<7;j++)

{

this.dayLb[i][j].setForeground(Color.BLACK);

}

}

//遍历日期数组

for(int i = 0;i<5;i++)

{

for(int j=0 ; j<7 ;j++)

{

//如果是当前月份的日历

if(this.yearCb.getSelectedItem().equals(this.getNow(MyCalendar.YEAR))&&this.monCb.getSelectedItem().equals(this.getNow(MyCalendar.MONTH)))

{

//将今天置为红色

if(this.dayLb[i][j].getText().equals(this.getNow(MyCalendar.DAY_OF_MONTH)+””))

{

this.dayLb[i][j].setForeground(Color.RED);

}

}

//如果不是今天(红色)

if(this.dayLb[i][j].getForeground()!=Color.RED)

{

//而且是要改变的日期

if(this.dayLb[i][j].getText().equals(text))

{

//置为蓝色

this.dayLb[i][j].setForeground(Color.BLUE);

}

else

{

//什么也不做

}

}

}

}

}

/**

* 获取某月的第一天是星期几

* @param year 年

* @param month 月

* @return 星期几

*/

private int theFirstDay(int year , int month)

{

GregorianCalendar gc =new GregorianCalendar(year,month-1,1,1,1,1);

return gc.get(Calendar.DAY_OF_WEEK)-1;

}

/**

* 获取某个月的天数

* @param year 年

* @param month 月

* @return 这个月的天数

*/

private int getDaysOfMonth(int year , int month)

{

if( (year%4==0&&year%100!=0)||(year%400==0))

{

if(month == 2)

return 29;

}

if(month ==1||month ==3||month ==5||month ==7||month ==8||month ==10||month ==12)

{

return 31;

}

else if(month == 2) return 28;

else return 30;

}

/**

* 获取当前系统时间的某个部分,如年份,月份等等

*
目前可以提取到的部分:年、月、日、时、分、秒、毫秒、星期几

*
如果需要提取的部分不存在,则返回0

* @param type 需要获取的部分,这个常量可以从本类中获取

* @return int类型 获取到的部分
如果需要提取的部分不存在,则返回0

*/

public int  getNow(int type)

{

GregorianCalendar gc = new GregorianCalendar();

switch(type)

{

case MyCalendar.YEAR:

return gc.get(Calendar.YEAR);

case MyCalendar.MONTH:

return gc.get(Calendar.MONTH)+1;

case MyCalendar.DAY_OF_MONTH:

return gc.get(Calendar.DAY_OF_MONTH);

case MyCalendar.DAY_OF_WEEK:

return ((gc.get(Calendar.DAY_OF_WEEK))-1);

default : return 0;

}

}

/**

* 发生动作方法(ActionListener监听器)

*/

public void actionPerformed(ActionEvent arg0)

{

Object e = arg0.getSource();

if(e == this.returnBt)

{

this.yearCb.setSelectedItem(this.getNow(YEAR));

this.monCb.setSelectedItem(this.getNow(MONTH));

this.refresh();

}

else if(e instanceof JComboBox)

{

this.refresh();

}

else if(e == this.aboutMi)

{

JOptionPane.showMessageDialog(f, “这是一个使用Java写的最基本的万年历\n” +

“版本:1.0.0\n” +

“作者:Ice Spring\n” +

“主页:http://www.javaliang.com\n” +

“1.2版本将加入农历,敬请期待”, “关于Java万年历”, JOptionPane.INFORMATION_MESSAGE);

}

}

/**

* 鼠标单击方法(MouseListener监听器)

*/

public void mouseClicked(MouseEvent e1) {

Object e = e1.getSource();

if(e instanceof JLabel)

{

JLabel l = (JLabel)e;

this.changeColor(l.getText());

}

}

public void mouseEntered(MouseEvent arg0) {}

public void mouseExited(MouseEvent arg0) {}

public void mousePressed(MouseEvent arg0) {}

public void mouseReleased(MouseEvent arg0) {}

public static void main(String[] arg)

{

new MyCalendar();

}

}

今天的文章java万年历JFrame_Java Gui万年历分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/31128.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注