java日历源代码_JAVA----日历源代码

本文介绍了如何使用Java编程创建一个CalendarBean类,用于生成并管理不同月份的日历,并在CalendarFrame类中实现了用户界面,允许用户输入年份和切换月份。通过实例展示了如何结合JFrame和ActionListener实现动态日历显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:先创建一个CalendarBean类:

代码:

import java.util.Calendar;

public class CalendarBean

{

String day[];

int year=2005,month=0;

public void setYear(int year)

{

this.year=year;

}

public int getYear()

{

return year;

}

public void setMonth(int month)

{

this.month=month;

}

public int getMonth()

{

return month;

}

public String[] getCalendar()

{

String a[]=new String[42];

Calendar date=Calendar.getInstance();

date.set(year,month-1,1);

int week=date.get(Calendar.DAY_OF_WEEK)-1;

int day=0;

//判断大月份

if(month==1||month==3||month==5||month==7

||month==8||month==10||month==12)

{

day=31;

}

//判断小月

if(month==4||month==6||month==9||month==11)

{

day=30;

}

//判断平年与闰年

if(month==2)

{

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

{

day=29;

}

else

{

day=28;

}

}

for(int i=week,n=1;i

{

a[i]=String.valueOf(n) ;

n++;

}

return a;

}

}

2:创建一个CalendarFrame类

import javax.swing.*;

public class CalendarFrame extends JFrame implements ActionListener {

JLabel labelDay[]=new JLabel[42];

JTextField text=new JTextField(10);

JButton titleName[]=new JButton[7];

JButton button=new JButton();

String name[]={"日","一","二","三","四","五","六"};

JButton nextMonth,previousMonth;

int year=1996,month=1;

CalendarBean calendar;

JLabel showmessage=new JLabel("",JLabel.CENTER);

JLabel lbl1=new JLabel("请输入年份:");

JLabel lbl2=new JLabel("        ");

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[i]=new JButton(name[i]);

pCenter.add(titleName[i]);

}

//pCenter添加组件LabelDay[i]

for(int i=0;i<42;i++){

labelDay[i]=new JLabel("",JLabel.CENTER);

pCenter.add(labelDay[i]);

}

text.addActionListener(this);

calendar=new CalendarBean();

calendar.setYear(year);

calendar.setMonth(month);

String day[]=calendar.getCalendar();

for(int i=0;i<42;i++){

labelDay[i].setText(day[i]);

}

nextMonth=new JButton("下月");

previousMonth=new JButton("上月");

button=new JButton("确定");

//注册监听器

nextMonth.addActionListener(this);

previousMonth.addActionListener(this);

button.addActionListener(this);

JPanel pNorth=new JPanel(),

pSouth=new JPanel();

pNorth.add(showmessage);

pNorth.add(lbl2);

pNorth.add(previousMonth);

pNorth.add(nextMonth);

pSouth.add(lbl1);

pSouth.add(text);

pSouth.add(button);

showmessage.setText("日历"+calendar.getYear()+"年"+calendar.getMonth()+"月");

ScrollPane scrollPane=new ScrollPane();

scrollPane.add(pCenter);

add(scrollPane,BorderLayout.CENTER);//窗口添加到ScrollPane 中间位置

add(pNorth,BorderLayout.NORTH);     //窗口添加pNorth在窗口北面

add(pSouth,BorderLayout.SOUTH);     //窗口添加pSouth在窗口的南面

}

public void actionPerformed(ActionEvent e){

if(e.getSource()==nextMonth){

month+=1;

if(month>12)

month=1;

calendar.setMonth(month);

String day[]=calendar.getCalendar();

for(int i=0;i<42;i++){

labelDay[i].setText(day[i]);

}

}

else if(e.getSource()==button){

month+=1;

if(month>12)

month=1;

calendar.setYear(Integer.parseInt(text.getText()));

String day[]=calendar.getCalendar();

for(int i=0;i<42;i++){

labelDay[i].setText(day[i]);

}

showmessage.setText("日历"+calendar.getYear()+"年"+calendar.getMonth()+"月");

}

}

}

3:在创建一个CalendarMainClass类

代码:

import javax.swing.JFrame;

import javax.swing.UIManager;

public class CalendarMainClass {

public static void main(String[]args){

try{

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

}

catch(Exception e){

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);

}

}

运行结果:

9ec641ac0f3364fe4e65aaa829833333.png

来源:https://www.cnblogs.com/zhouzetian/p/7396845.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值