java一个简单的万年历,java万年历制作心得体会
本文实例为大家分享了爪哇实现万年历效果的具体代码,供大家参考,具体内容如下
要求:
综合运用图像使用者界面编程、事件处理、日历类应用等知识设计一款月历,要求能通过输入(或选择)年月的方式正确显示当前月份的所有日期。
一、分析需求:
1、设计一个窗体,该窗体为边界布局布局;2、窗体的中心添加一个面板容器:面板容器的布局是七行七列的网格布局布局,面板容器中放置49个标签,用来显示日历;3、实现判断是否是闰年;4、计算某一个月的天数;5、明白一个月的第一天是周几,求出月历前面需要空的格数;
二、代码实现
包pro _ one导入javax。挥棒。*;导入Java。awt。*;导入Java。awt。事件。动作事件;导入Java。awt。事件。动作监听器;导入Java。文字。解析异常;导入Java。文字。简单的日期格式;导入Java。util。日历;导入Java。util。日期;导入Java。util。公历;@SuppressWarnings(serial )公共类pro_one扩展窗口实现动作监听器{ JPanel head=new JPanel();//上部容器JPanel body=new JPanel();//中部容器JPanel foot=new JPanel();//下部容器日历日历=日历。getinstance();int dayNow=calendar.get(日历。日期);int monthNow=Calendar。获取(日历.月)1;现在的int年=日历。获取(日历.年份);私有单行文本文本;//查询年份int year=calendar.get(Calendar .年份);//获取当前查询年份,默认为当前年份私有JTextField text1//查询月份int month=calendar.get(Calendar .月)1;//获取当前查询月份,默认为当前月份private pro_one(){//构造方法//主要参数设置setTitle(月历);setSize(600,480);setLocationRelativeTo(null);//窗体居中setResizable(false);//关闭窗体大小可调setDefaultCloseOperation(EXIT _ ON _ CLOSE);//界面布局//上部容器头。设置布局(new flow layout());JButton search JButton=new JButton(确定);searchJButton.setFont(新字体(‘辛黑’,字体。粗体,15));searchJButton.setPreferredSize(新维度(50,35));搜索jbutton。设置边框(空);JButton upJButton=new JButton(上月);upJButton.setFont(新字体(‘辛黑’,字体。粗体,15));upj按钮。设置边框(空);upJButton.setPreferredSize(新维度(50,35));JButton downJButton=new JButton(下月);downJButton.setFont(新字体(‘辛黑’,字体。粗体,15));向下按钮。设置边框(空);downJButton.setPreferredSize(新维度(50,35));JLabel jLabelShow=new JLabel(请输入日期年份:);jLabelShow.setFont(新字体(‘辛黑’,字体。粗体,15));组件
how1=new JLabel("月份:"); jLabelShow1.setFont(new Font("SimHei",Font.BOLD,15)); text=new JTextField(4); text1=new JTextField(2); head.add(jLabelShow); head.add(text); head.add(jLabelShow1); head.add(text1); head.add(searchJButton); head.add(upJButton); head.add(downJButton); searchJButton.addActionListener(this); upJButton.addActionListener(this); downJButton.addActionListener(this); //中部容器 body.applyComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);//每行添加组件的顺序 body.setLayout(new GridLayout(7,7,1,1)); getDateInfo(String.valueOf(year)+"-"+String.valueOf(month)); //下部容器 foot.setSize(new Dimension(500,200)); foot.setLayout(new FlowLayout(FlowLayout.CENTER)); Container integralContainer=this.getContentPane();//创建全局容器 integralContainer.add(head,BorderLayout.NORTH); integralContainer.add(body,BorderLayout.CENTER); integralContainer.add(foot,BorderLayout.SOUTH); } @Override public void actionPerformed(ActionEvent actionEvent) {//监听事件 String label=actionEvent.getActionCommand(); switch (label) { case "确定": System.out.println("进入查询"); try { year = Integer.parseInt(text.getText()); month=Integer.parseInt(text1.getText()); getDateInfo(String.valueOf(year)+"-"+String.valueOf(month)); }catch (NumberFormatException e){ System.out.println("非数字异常已被捕获,进程正常!"); } break; case "上月": System.out.println("进入上月"); if (month==1){ year--; month=12; }else month--; getDateInfo(String.valueOf(year)+"-"+String.valueOf(month)); break; case "下月": System.out.println("进入下月"); if (month==12){ year++; month=1; }else month++; getDateInfo(String.valueOf(year)+"-"+String.valueOf(month)); break; } } private void getDateInfo(String date) {//获取日期信息 try { SimpleDateFormat dFormat = new SimpleDateFormat("yyyy-MM");// 日期格式化类 Date parse = dFormat.parse(date);// 把字符串类型的日期转换为date类型的 Calendar calendar = new GregorianCalendar();// 创建一个公历类的实例 calendar.setTime(parse);// 把格式化好的日期对象放进Calendar calendar.set(Calendar.DATE, 1);//重置日期为第一天 // 获取这个月的第一天是周几 int weekDay = calendar.get(Calendar.DAY_OF_WEEK); // 获取每个月最大的天数 int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); body.removeAll(); body.repaint(); String[] title = {"日", "一", "二", "三", "四", "五", "六"}; for (String label : title) { JLabel jLabel = new JLabel(label); jLabel.setHorizontalAlignment(JLabel.CENTER); jLabel.setBorder(BorderFactory.createLineBorder(Color.black)); jLabel.setFont(new Font("SimHei", Font.BOLD, 18)); body.add(jLabel); body.revalidate(); } for (int i = 1; i <= 42; i++) { if (i >= weekDay && i <= (maxDay + weekDay - 1)) { JLabel jLabel = new JLabel(String.valueOf(i - weekDay + 1)); jLabel.setFont(new Font("SimHei", Font.BOLD, 15)); jLabel.setHorizontalAlignment(JLabel.CENTER); if ((year==yearNow)&&(month==monthNow)&&(i - weekDay + 1==dayNow)){ System.out.println("00"); jLabel.setBorder(BorderFactory.createLineBorder(Color.WHITE)); } body.add(jLabel); body.revalidate(); } else { JLabel jLabel = new JLabel(""); jLabel.setHorizontalAlignment(JLabel.CENTER); jLabel.setFont(new Font("SimHei", Font.BOLD, 15)); body.add(jLabel); body.revalidate(); } } if (year > 0 && year <= 9999) { foot.removeAll(); foot.repaint(); JLabel show = new JLabel(year + "年" + month + "月"); show.setFont(new Font("SimHei", Font.BOLD, 20)); foot.add(show);//将标签添加到下部容器 foot.revalidate(); } }catch (ParseException e){ System.out.println("日期异常亦已被捕获,进程正常!"); } } public static void main(String[] args){//主方法 JFrame jFrame=new pro_one(); jFrame.setVisible(true); }}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。