如何用java写日历

导入Java . awt . borderlayout;

导入Java . awt . color;

导入Java . awt . dimension;

导入Java . awt . gridlayout;

导入Java . awt . system color;

导入Java . awt . event . action event;

导入Java . awt . event . key event;

导入Java . awt . event . mouse event;

导入Java . util . calendar;

导入Java . util . Gregorian calendar;

导入Java . util . locale;

导入Java . util . date;

导入Java . util . string tokenizer;

导入javax . swing . border factory;

导入javax . swing . jbutton;

导入javax . swing . jframe;

导入javax . swing . jlabel;

导入javax . swing . jpanel;

导入javax . swing . jtextfield;

导入javax . swing . jtogglebutton;

导入javax . swing . swing constants;

导入javax . swing . ui manager;

/**

* & ltp & gt标题:摇摆日历

* & ltp & gt描述:操作日期

* @作者duxu2004

* @版本1.0.1

*/

JCalendar类扩展JPanel{

//动态表示年、月、日。

private int年= 0;

private int month = 0;

private int day = 0;

//主面板

private JPanel Main = new JPanel();

//日面板

private JPanel jPanelDay = new JPanel();

//月亮面板

private JPanel JPanel month = new JPanel();

//年的输入位置

私有JTextField Year = new JTextField();

//输入月份的位置

私有JTextField Month = new JTextField();

//减少月份

private JButton month down = new JButton();

//添加月份

private JButton MonthUp = new JButton();

private JPanel JPanel button = new JPanel();

//减少年份

private JButton year down = new JButton();

//添加年份

private JButton year up = new JButton();

//显示日期的位置。

private JLabel Out = new JLabel();

//中国时区,以后可以从中扩展设置时区的功能。

私有区域设置l =区域设置。中文;

//主日历

private Gregorian calendar cal = new Gregorian calendar(l);

//星期几面板

private JPanel week panel = new JPanel();

//日按钮组

private JToggleButton[]days = new JToggleButton[42];

//天空面板

私有JPanel天数=新JPanel();

//标记

private JLabel JLabel 1 = new JLabel();

private JLabel JLabel 2 = new JLabel();

private JLabel JLabel 3 = new JLabel();

private JLabel JLabel 4 = new JLabel();

private JLabel JLabel 5 = new JLabel();

private JLabel JLabel 6 = new JLabel();

private JLabel JLabel 7 = new JLabel();

//当前选择的日期按钮

private JToggleButton cur = null

//一个月中的天数数组,用于获取当前月份有多少天。

// 1 2 3 4 5 6 7 8 9 10 11 12

private int[] mm={31,28,31,30,31,30,31,30,31,30,31}

//空日期构造函数

公共JCalendar() {

尝试{

JB init();

}

捕捉(异常e) {

e . printstacktrace();

}

}

//带日期设置的构造函数

public JCalendar(int年,int月,int日){

cal.set(年、月、日);

尝试{

JB init();

}

捕捉(异常e) {

e . printstacktrace();

}

}

//带有日历输入的构造函数

公共日历(公历日历){

cal =日历;

尝试{

JB init();

}

捕捉(异常e) {

e . printstacktrace();

}

}

//带日期输入的构造函数

公共JCalendar(日期日期){

cal.setTime(日期);

尝试{

JB init();

}

捕捉(异常e) {

e . printstacktrace();

}

}

//初始化组件

私有void jbInit()抛出异常{

//初始化年、月、日。

iniCalender();

this . set layout(new BorderLayout());

this . set border(border factory . createraisedbevelborder());

this.setMaximumSize(新维度(200,200));

this.setMinimumSize(新维度(200,200));

this.setPreferredSize(新维度(200,200));

main . set layout(new BorderLayout());

main . set background(system color . info);

main . set border(null);

out . set background(color . light gray);

out . sethorizontal alignment(swing constants。中心);

Out.setMaximumSize(新维度(100,19));

Out.setMinimumSize(新维度(100,19));

Out.setPreferredSize(新维度(100,19));

jlabel 1 . set foreground(color . red);

jlabel 1 . sethorizontalignment(swing constants。中心);

jlabel 1 . sethorizontaltextposition(swing constants。中心);

jlabel 1 . settext(" day ");

jlabel 2 . set foreground(color . blue);

jlabel 2 . sethorizontal alignment(swing constants。中心);

jlabel 2 . sethorizontaltextposition(swing constants。中心);

jlabel 2 . settext(" six ");

jlabel 3 . sethorizontal alignment(swing constants。中心);

jlabel 3 . sethorizontaltextposition(swing constants。中心);

jlabel 3 . settext(" five ");

jlabel 4 . sethorizontal alignment(swing constants。中心);

jlabel 4 . sethorizontaltextposition(swing constants。中心);

JLabel4.setText("四");

jlabel 5 . sethorizontal alignment(swing constants。中心);

jlabel 5 . sethorizontaltextposition(swing constants。中心);

jlabel 5 . settext(" three ");

jlabel 6 . set border(null);

jlabel 6 . sethorizontal alignment(swing constants。中心);

jlabel 6 . sethorizontaltextposition(swing constants。中心);

jlabel 6 . settext(" two ");

jlabel 7 . set background(color . light gray);

jlabel 7 . set foreground(color . black);

jlabel 7 . set border(null);

jlabel 7 . sethorizontal alignment(swing constants。中心);

jlabel 7 . sethorizontaltextposition(swing constants。中心);

jlabel 7 . settext(" one ");

week panel . set background(ui manager . getcolor(" internal frame . activetitlegradient "));

week panel . set border(border factory . createetchedborder());

weekPanel.setLayout(新GridLayout(1,7));

weekPanel.add(jLabel1,null);

weekPanel.add(jLabel7,null);

weekPanel.add(jLabel6,null);

weekPanel.add(jLabel5,null);

weekPanel.add(jLabel4,null);

weekPanel.add(jLabel3,null);

weekPanel.add(jLabel2,null);

monthup . setalignmentx((float)0.0);

monthup . setactionmap(null);

jpanelmonth . set background(system color . info);

jpanelmonth . set layout(new BorderLayout());

jpanelmonth . set border(border factory . createetchedborder());

month . set border(null);

month . sethorizontal alignment(swing constants。中心);

month . addmouse listener(new Java . awt . event . mouse adapter(){

public void mouse clicked(mouse event e){

month _ mouse clicked(e);

}

});

month . addkey listener(new Java . awt . event . key adapter(){

公共void按键(按键事件e) {

month _ keyped(e);

}

});

month down . set border(null);

month down . settext(" \ u25c 4 ");

month down . addactionlistener(new Java . awt . event . action listener(){

public void action performed(action event e){

month down _ action performed(e);

}

});

monthup . set border(null);

monthup . settext(" \ u25BA ");

monthup . addactionlistener(new Java . awt . event . action listener(){

public void action performed(action event e){

MonthUp _ action performed(e);

}

});

jpanelbutton . set layout(null);

jpanelbutton . set border(null);

jpanelbutton . addcomponentlistener(new Java . awt . event . component adapter(){

public void component resized(Java . awt . event . component event evt){

jpanelbuttoncomponentrezed(evt);

}

});

year . set border(border factory . createetchedborder());

Year.setMaximumSize(新维度(80,25));

Year.setMinimumSize(新维度(80,25));

Year.setPreferredSize(新维度(80,25));

year . sethorizontal alignment(swing constants。中心);

year . addmouse listener(new Java . awt . event . mouse adapter(){

public void mouse clicked(mouse event e){

year _ mouse clicked(e);

}

});

year . addkey listener(new Java . awt . event . key adapter(){

公共void按键(按键事件e) {

year _ keyped(e);

}

});

year down . set border(null);

YearDown.setMaximumSize(新维度(16,16));

YearDown.setMinimumSize(新维度(16,16));

YearDown.setPreferredSize(新维度(16,16));

YearDown.setSize(新维度(16,16));

year down . settext("▼");

year down . addactionlistener(new Java . awt . event . action listener(){

public void action performed(action event e){

year down _ action performed(e);

}

});

year up . set border(null);

YearUp.setMaximumSize(新维度(16,16));

YearUp.setMinimumSize(新维度(16,16));

YearUp.setPreferredSize(新维度(16,16));

YearUp.setSize(新维度(16,16));

year up . settext(" ▲");

year up . addactionlistener(new Java . awt . event . action listener(){

public void action performed(action event e){

year up _ action performed(e);

}

});

jpanelday . set layout(new BorderLayout());

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

days . set background(system color . info);

for(int I = 0;我& lt42;i++){

days[I]= new JToggleButton();

天[我]。set border(null);

天[我]。set background(system color . info);

天[我]。sethorizontal alignment(swing constants。中心);

天[我]。setHorizontalTextPosition(swing constants。中心);

//days[i]。setSize(l,l);

天[我]。addActionListener(new Java . awt . event . actionlistener(){

public void action performed(action event e){

day = integer . parse int((JToggleButton)e . getsource())。getText());

showDate();

showDays();

}

});

days . add(days[I]);

}

this.add(Main,BorderLayout。北);

this.add(jPanelDay,BorderLayout。中心);

this.add(jPanelMonth,BorderLayout。南);

Main.add(Year,BorderLayout。中心);

Main.add(Out,BorderLayout。西);

Main.add(jPanelButton,BorderLayout。东);

jpanelbutton . add(year up);

jpanelbutton . add(year down);

jPanelDay.add(weekPanel,BorderLayout。北);

jPanelDay.add(Days,BorderLayout。中心);

jPanelMonth.add(Month,BorderLayout。中心);

jPanelMonth.add(MonthDown,BorderLayout。西);

jPanelMonth.add(MonthUp,BorderLayout。东);

show month();

show year();

showDate();

showDays();

}

//自定义重画年份选择面板

void jpanelbuttoncomponentrezed(Java . awt . event . component event evt){

YearUp.setLocation(0,0);

YearDown.setLocation(0,year up . get height());

jpanelbutton . setsize(year up . getwidth()、year up . getheight()* 2);

jPanelButton.setPreferredSize(新维度(YearUp.getWidth()、year up . getheight()* 2));

jpanelbutton . update ui();

}

//用于测试

公共静态void main(String[] args){

JFrame f = new JFrame();

f . setcontentpane(new JCalendar());

f . pack();

//f . setresizable(false);

f . show();

}

//添加年份

void year up _ action performed(action event e){

year++;

show year();

showDate();

showDays();

}

//减少年份

void year down _ action performed(action event e){

年份-;

show year();

showDate();

showDays();

}

//减少月份

void month down _ action performed(action event e){

月-;

如果(月& lt0) {

月= 11;

年份-;

show year();

}

show month();

showDate();

showDays();

}

//添加月份

void MonthUp _ action performed(action event e){

month++;

if(month==12) {

月= 0;

year++;

show year();

}

show month();

showDate();

showDays();

}

//初始化年、月、日

void in calender(){

year=cal.get(日历。年份);

month=cal.get(日历。月);

day=cal.get(日历。月日);

}

//刷新月份

void showMonth(){

month . settext(integer . tostring(month+1)+" month ");

}

//刷新年份

void showYear(){

year . settext(integer . tostring(year)+" year ");

}

//刷新日期

void showDate(){

out . settext(integer . tostring(year)+"-"+integer . tostring(month+1)+"-"+integer . tostring(day));

}

//重新绘制日期选择面板

void showDays() {

cal.set(年,月,1);

int first day ofweek = cal . get(Calendar。星期几);

int n = mm[月];

if(cal . isleapyear(year )& amp;& ampmonth = = 1)n++;

int I = 0;

for(;我& ltfirst day ofweek-1;i++){

天[我]。set enabled(false);

天[我]。set selected(false);

天[我]。setText(" ");

}

int d = 1;

for(;d & lt= n;d++){

天[我]。setText(integer . tostring(d));

天[我]。setEnabled(真);

if(d==day) days[i]。set selected(true);

else days[i]。set selected(false);;

i++;

}

for(;我& lt42;i++){

天[我]。set enabled(false);

天[我]。set selected(false);

天[我]。setText(" ");

}

}

//单击年份面板选择整年字符串。

void SelectionYear(){

year . setselectionstart(0);

year . set selection end(year . gettext()。length());

}

//单击月份面板选择整月字符串。

void SelectionMonth(){

month . setselectionstart(0);

month . set selection end(month . gettext()。length());

}

//月面板响应鼠标点击事件。

void Month _ mouse clicked(mouse event e){

//selection month();

input month();

}

//检查输入的月份。

void inputMonth(){

字符串s;

If(Month.getText()。endsWith("月"))

{

s=Month.getText()。substring(0,Month.getText()。长度()-1);

}

else s = month . gettext();

month = integer . parse int(s)-1;

this . show me();

}

//月面板键盘敲击事件响应

void Month _ key pressed(key event e){

if(e.getKeyChar()==10)

input month();

}

//年份面板响应鼠标点击事件。

void Year _ mouse clicked(mouse event e){

//selection year();

input year();

}

//年份键盘敲击事件响应

void Year _ key pressed(key event e){

//System.out.print(新整数(e.getKeyChar())。byte value());

if(e.getKeyChar()==10)

input year();

}

//验证输入的年份字符串。

void inputYear() {

字符串s;

If(Year.getText()。endsWith("年"))

{

s=Year.getText()。substring(0,Year.getText()。长度()-1);

}

else s = year . gettext();

year = integer . parse int(s);

this . show me();

}

//以字符串形式返回日期,yyyy-mm-dd。

公共字符串getDate(){ return out . gettext();}

//以字符串形式输入日期,yyyy-mm-dd。

public void setDate(字符串日期){

如果(日期!=null){

string tokenizer f = new string tokenizer(日期,“-”);

if(f.hasMoreTokens())

year = integer . parse int(f . nexttoken());

if(f.hasMoreTokens())

month = integer . parse int(f . nexttoken());

if(f.hasMoreTokens())

day = integer . parse int(f . nexttoken());

cal.set(年、月、日);

}

this . show me();

}

//以date对象的形式输入日期。

公共无效设置时间(日期日期){

cal.setTime(日期);

this . inicalender();

this . show me();

}

//返回日期对象

public Date getTime(){ return cal . getTime();}

//返回当前日期。

public int getDay() {

返回日;

}

//设置当前日期

public void setDay(int day) {

this.day = day

cal.set(今年,本月,本日);

this . show me();

}

//设置当前年份

public void setYear(int year) {

this.year = year

cal.set(今年,本月,本日);

this . show me();

}

//返回当前年份。

public int getYear() {

返回年份;

}

//返回当前月份。

public int getMonth() {

返回月份;

}

//设置当前月份

公共void setMonth(int month) {

this.month =月;

cal.set(今年,本月,本日);

this . show me();

}

//刷新

public void showMe(){

this . showdays();

this . show month();

this . show year();

this . showdate();

}

}

公共类TestJCalendar {

公共静态void main(String[] args) {

JFrame f = new JFrame();

f . setcontentpane(new JCalendar());

f . pack();

//f . setresizable(false);

f . show();

}

}