万年历-Java课程设计题(eclipse编辑器)
Posted gamedev˚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了万年历-Java课程设计题(eclipse编辑器)相关的知识,希望对你有一定的参考价值。
项目目录结构:
`CalendarMainClass.java`
package Calendar;
/**
* CalendarMainClass主类
* @author Administrator
* @version 版本1.0
*/
public class CalendarMainClass
/**
* 主函数
* @param args 传入的参数 args
*/
public static void main(String[] args)
/**
* 创建一个基于CalendarFrame的主容器fram
*/
CalendarFrame frame=new CalendarFrame();
/**
* 设置主容器的显示位置,以及界面的高和宽数据
*/
frame.setBounds(200,150,670,490);
/**
* 设置主容器为可见
*/
frame.setVisible(true);
/**
* 主容器初始化年月信息
*/
frame.setYearAndMonth(2016,1);
/**
* 设置主容器的标题
*/
frame.setTitle("万年历");
`CalendarFrame.java`
package Calendar;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.text.SimpleDateFormat;
import javax.swing.*;
import javax.swing.border.*;
/**
*
* 窗体的具体构造及执行代码
* @author Administrator
* @version 版本1.0
*/
public class CalendarFrame extends JFrame implements ActionListener,ItemListener
private static final long serialVersionUID = 1L;
/**
* labelDay[] 存放每一天的标签数组|
* titleName 显示标题栏名称的按钮|
* text 输入年份的文本框|
* button,button1 按钮组件|
* label 标签|
* comBox 下拉列表组件|
* showMessage 显示日历的标签项
*
*/
JLabel labelDay[]=new JLabel[42];
JButton titleName[]=new JButton[7];
JTextField text;
JButton button,button1;
JLabel label1,label2;
JComboBox<String> comBox;
String name[]="日","一","二","三","四","五","六";
CalendarBean calendar;
JLabel showMessage=new JLabel("",JLabel.CENTER);
int year=2011,month=2;
/**
* JFrame都是Windows类的子类,因此主窗口为Windows型容器,其默认布局为BorderLayout布局
*/
public CalendarFrame()
/**
* 为窗体修改自定义图标
*/
Image icon=Toolkit.getDefaultToolkit().getImage("F:\\\\eclipse\\\\代码区\\\\Calendar\\\\src\\\\Calendar\\\\calendar1.png");
setIconImage(icon);
/**
* 创建面板(可向面板中添加组件,再将面板添加到其他容器中)
*/
JPanel pCenter=new JPanel();
/**
* 将pCenter的布局设置为7行7列的GridLayout布局
*/
pCenter.setLayout(new GridLayout(7,7));
pCenter.setBackground(Color.WHITE);
/**
* 向主容器中添加星期栏
*/
for(int i=0;i<7;i++)
titleName[i]=new JButton(name[i]);
titleName[i].setBorder(new SoftBevelBorder(BevelBorder.RAISED));
//titleName[i].setBackground(Color.green);
pCenter.add(titleName[i]);
/**
* 向主容器添加每个小日期标签
*/
for(int i=0;i<42;i++)
labelDay[i]=new JLabel("",JLabel.CENTER);
labelDay[i].setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
pCenter.add(labelDay[i]);
/**
* 声明calendar为calendarBean类的子类
*/
calendar=new CalendarBean();
/**
* 设置个组件的具体内容
*
*/
text=new JTextField(3);
text.setText("2016");
button=new JButton("转到");
button1=new JButton("当前日期");
label1=new JLabel(" 万年历 ");
/**
* 设置label标签的字体大小为30px
*/
label1.setFont(new Font("",1,30));
/**
* 创建下拉列表,并添加下拉列表选项
*/
label2=new JLabel("今日:");
comBox=new JComboBox<String>();
String []a="1","2","3","4","5","6","7","8","9","10","11","12";
for(int i=0;i<a.length;i++)
comBox.addItem(a[i]);
/**
* 向组件添加响应事件
*/
button.addActionListener(this);
button1.addActionListener(this);
comBox.addItemListener(null);
/**
* 创建pNorth,pSouth面板
*/
JPanel pNorth=new JPanel();
pNorth.setBackground(Color.cyan);
JPanel pSouth=new JPanel();
/**
* 向面板中添加各个组件
*/
pNorth.add(label1);
pNorth.add(label2);
pSouth.add(button1);
pSouth.add(text);
pSouth.add(new JLabel("年"));
pSouth.add(comBox);
pSouth.add(new JLabel("月"));
pSouth.add(button);
pSouth.add(showMessage);
/**
* 将三个面板添加到以BorderLayout为布局的主Windows型容器中
*/
add(pCenter,BorderLayout.CENTER);
add(pNorth,BorderLayout.NORTH);
add(pSouth,BorderLayout.SOUTH);
/**
* 向setYearAndMonth方法传入year,month的值
*/
setYearAndMonth(year,month);
/**
* 设置,当点击窗体右上角的关闭图标时,程序会做出直接结束程序的处理
*/
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
/**
* ------编写传入年月的方法setYearAndMonth------
* @param y 年份
* @param m 月份
*/
public void setYearAndMonth(int y,int m)
calendar.setYear(y);
/**
* 将setYearAndMonth方法得到的year,month的值传给calendar类
*/
calendar.setMonth(m);
/**
* 获取calendar类中getCalendar方法中的日期字符串数组,将获取的字符串数组的值传给每个labelDay小日期标签
*/
String day[]=calendar.getCalendar();
for(int i=0;i<42;i++)
labelDay[i].setText(day[i]);
/**
* 在showMessage标签中显示输出日期
*/
showMessage.setText("日历:"+calendar.getYear()+"年"+calendar.getMonth()+"月");
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
label2.setText("今日:"+df.format(new Date()));
/**
* 设置标签输出的字体颜色为蓝色
*/
showMessage.setForeground(Color.BLUE);
/**
* ---------重写actionPerformed方法---------
*/
public void actionPerformed(ActionEvent e)
/**
* reg为正则表达式,表示纯数字的字符串(不含其他任何与数字无关的字符)
*/
String reg="^[\\\\d]*$";
/**
* 判断响应事件触发的是button组件
*/
if(e.getSource()==button)
/**
* 这个地方如何让程序识别并弹出对话框,而不是在未输入时直接判别程序出错
*/
if(text.getText().isEmpty())
JOptionPane.showMessageDialog(this, "您未输入年份", "消息对话框", JOptionPane.WARNING_MESSAGE);
/**
* 将屏幕焦点聚在text组件上
*/
text.requestFocus(true);
/**
* 判断text文本框中是否为纯数字,若不是则弹出对话框 "您输入了非法字符"
*/
else if(!(text.getText()).matches(reg))
JOptionPane.showMessageDialog(this, "您输入了非法字符", "消息对话框", JOptionPane.WARNING_MESSAGE);
/**
* 判断text文本框中是否为纯数字,若是,则输出相应年份
*/
else
/**
* 将文本框中得到的字符串强制转为整型值,并赋值给整型变量i
*/
Integer i=Integer.parseInt(text.getText());
/**
* 将整型i变量中的值传递给calendar类中,并设置为year值
*/
calendar.setYear(i);
/**
* 判断用户是否使用了下拉列表框,若未使用,则弹出消息对话框 "您未选择月份"
*/
if(((String)comBox.getSelectedItem()).equals("选择月份"))
JOptionPane.showMessageDialog(this, "您未选择月份", "消息对话框", JOptionPane.WARNING_MESSAGE);
/**
* 将屏幕焦点聚在comBox组件上
*/
comBox.requestFocus(true);
else
/**
* 将下拉列表框中选中的字符串值强制转换为整型,并赋值给整型变量j
*/
Integer j=Integer.parseInt(comBox.getSelectedItem().toString());
/**
* 将整型i变量中的值传递给calendar类中,并设置为month值
*/
calendar.setMonth(j);
/**
* 获取calendar类中getCalendar方法中的日期字符串数组
*/
String day[]=calendar.getCalendar();
/**
* 将获取的字符串数组的值传给每个labelDay小日期标签
*/
for(int n=0;n<42;n++)
labelDay[n].setText(day[n]);
/**
* 在showMessage标签中显示输出日期
*/
showMessage.setText("日历:"+calendar.getYear()+"年"+calendar.getMonth()+"月");
/**
* 判断响应时间触发的是button1组件
*/
else if(e.getSource()==button1)
/**
* --------------获取系统当前日期--------------
*/
Calendar c=Calendar.getInstance();
int y=c.get(Calendar.YEAR);
int m=c.get(Calendar.MONTH)+1;
calendar.setMonth(m);
String day[]=calendar.getCalendar();
for(int n=0;n<42;n++)
labelDay[n].setText(day[n]);
showMessage.setText("日历:"+y+"年"+m+"月");
text.setText("");
/**
* 设置showMessage标签的字体颜色为蓝色
*/
showMessage.setForeground(Color.BLUE);
/**
* ---------重写itemStateChanged方法--------
* 下拉列表的响应事件具体已经在actionPerformed方法内实现
*/
public void itemStateChanged(ItemEvent arg0)
// TODO Auto-generated method stub
`CalendarBean.java`
package Calendar;
import java.util.Calendar;
/**
* 生成日历字符串数组
* @author Administrator
* @version 版本1.0
*/
public class CalendarBean
String day[];
int year=2005,month=0;
/**
* 设置year的set和get方法
* @param year 年份
*
*/
public void setYear(int year)
this.year=year;
public int getYear()
return year;
/**
* 设置month的set和get方法
* @param month 月份
*/
public void setMonth(int month)
this.month=month;
public int getMonth()
return month;
/**
* 创建可以得到具体日期的字符串数组
* @return 返回具体日期的字符串数组
*/
public String[] getCalendar()
String a[]=new String[42];
Calendar 日历=Calendar.getInstance();
日历.set(year, month-1, 1);
int 星期几=日历.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=星期几,n=1;i<星期几+day;i++)
a[i]=String.valueOf(n);
n++;
return a;
以上是关于万年历-Java课程设计题(eclipse编辑器)的主要内容,如果未能解决你的问题,请参考以下文章