Java实现万年历效果

本文实例为大家分享了Java实现万年历效果的具体代码,供大家参考,具体内容如下

要求:

综合运用GUI编程、事件处理、Calendar类应用等知识设计一款月历,要求能通过输入(或选择)年月的方式正确显示当前月份的所有日期。

一、分析需求:

1、设计一个窗体,该窗体为BorderLayout布局;
2、窗体的中心添加一个Panel容器:Panel容器的布局是7行7列的GridLayout布局,Panel容器中放置49个标签,用来显示日历;
3、实现判断是否是闰年;
4、计算某一个月的天数;
5、明白一个月的第一天是周几,求出月历前面需要空的格数;

二、代码实现

package pro_one;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

@SuppressWarnings("serial")
public class pro_one extends JFrame implements ActionListener {

    JPanel head=new JPanel();//上部容器
    JPanel body=new JPanel();//中部容器
    JPanel foot=new JPanel();//下部容器
    Calendar calendar=Calendar.getInstance();
    int dayNow=calendar.get(Calendar.DATE);
    int monthNow=calendar.get(Calendar.MONTH)+1;
    int yearNow=calendar.get(Calendar.YEAR);
    
    private JTextField text;//查询年份
    int year = calendar.get(Calendar.YEAR);//获取当前查询年份,默认为当前年份

    private JTextField text1;//查询月份
    int month = calendar.get(Calendar.MONTH)+1;//获取当前查询月份,默认为当前月份
    
    private pro_one(){//构造方法
        //主要参数设置
        setTitle("月历");
        setSize(600,480);
        setLocationRelativeTo(null);//窗体居中
        setResizable(false);//关闭窗体大小可调
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        //界面布局
        //上部容器
        head.setLayout(new FlowLayout());
        JButton searchJButton=new JButton("确定");
        searchJButton.setFont(new Font("SimHei",Font.BOLD,15));
        searchJButton.setPreferredSize(new Dimension(50,35));
        searchJButton.setBorder(null);
        JButton upJButton=new JButton("上月");
        upJButton.setFont(new Font("SimHei",Font.BOLD,15));
        upJButton.setBorder(null);
        upJButton.setPreferredSize(new Dimension(50,35));
        JButton downJButton=new JButton("下月");
        downJButton.setFont(new Font("SimHei",Font.BOLD,15));
        downJButton.setBorder(null);
        downJButton.setPreferredSize(new Dimension(50,35));
        JLabel jLabelShow=new JLabel("请输入日期 年份:");
        jLabelShow.setFont(new Font("SimHei",Font.BOLD,15));
        JLabel jLabelShow1=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);
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 非常实用的java万年历制作方法

    完成万年历的制作需要用到数组.循环等知识. 编程计算输入的月份距离1900年1月1日的天数,求出当前月之前的总天数(不包含当前输入月分的天数,) 编程计算输入月份的第一天是星期几,(公式:星期几=1+天数差%7). import java.util.Scanner; public class Calendar{ public static void main(String[] args){ int year; int month; int totaldays=0; Scanner sc=new

  • JAVA实现的简单万年历代码

    本文实例讲述了JAVA实现的简单万年历.分享给大家供大家参考,具体如下: import java.util.Scanner; public class PrintCalendar { public static void main(String[] args) { int years = 0; int month = 0; int days = 0; boolean isRun = false; //從控制台輸入年,月 Scanner input = new Scanner(System.in)

  • Java编写多功能万年历程序的实例分享

    这里的万年历制作主要用到了Calendar类和GregorianCalendar类,我们先来回顾一下基础知识: 基础部分 一.Calendar类. 1,主要字段: YEAR(年份).MONTH(月份从0开始).DATE(一月的某天).HOUR(指示上午或下午的小时).HOUR_F_DAY(指示一天中的小时.).DAY_OF_WEEK (一个星期中的某天).DAY_OF_MONTH(一个月中的某天).DAY_OF_YEAR(一年中的某天).DAY_OF_WEEK _IN_MONTH(一个月中的第几

  • 用Java编程输出万年历的功能实现

    1.功能实现 输入1查看上个月日历 输入2查看下个月日历 输入3查看去年本月日历 输入4查看明年本月日历 输入5查看指定月份日历 2.代码所导入的包 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Scan

  • Java 实现万年历总结

    一,Java实现万年历的代码: package calendar; import java.util.Scanner;//日历项目 public class RiLi{ public static void main(String[] args){ Scanner A=new Scanner(System.in); System.out.println("请输入年份:"); int year=A.nextInt(); System.out.println("请输入月份:&qu

  • java万年历,获取该年月日历表

    这篇文章应用java技术输入年份和月份获取该年月日历表,下面通过一段代码给大家做展示: 输入年份和月份,打印出这个月的日历表     1.1900年1月1日是星期一     2.计算输入的年份距离1900年有多少天再计算当年1月1日距这个月有多少天     3.总天数%7得出从星期几开始     注:计算机中的时间最小到1900年,此外UNIX系统认为1970年1月1日0点是时间纪元.     so,在本程序中不考了1900年以前的年份了.有兴趣的可以自己研究下. import java.uti

  • Java实现简单的万年历

    本文实例为大家分享了Java实现简单万年历的具体代码,供大家参考,具体内容如下 1 要求 1.输入年份: 2.输入月份: 3.输出某年某月的日历. 2 思路 1.实现从控制台接收年和月,判断是否是闰年(判断是否是闰年:能被4整除但不能被100整除:或者能被400整除): 2.计算输入月份的天数: 3.计算该月第一天是星期几: 3.1 计算输入年份距离1900年1月1日的天数: 3.2 计算输入月份之前的天数(从当年年初开始): 3.3 将以上两组数据进行求和: 3.4 已知该月之前的天数,计算输

  • Java基础之打印万年历的简单实现(案例)

    问题:输入年,月,打印对应年月的日历. 示例: 问题分析: 1,首先1970年是Unix系统诞生的时间,1970年成为Unix的元年,1970年1月1号是星期四,现在大多的手机的日历功能只能显示到1970年1月1日这一天; 2,要想打印某年某月的日历,首先应该计算出这个月1号是星期几? 解决1号是星期几? 2.1:先计算出年天数,即截至这一年1月1号的天数,用for循环,从1970年开始,闰年+366,平年+365; 2.2:计算出月天数,即截至本月1号的天数,用for循环,从1月份开始,算出月

  • Java实现万年历效果

    本文实例为大家分享了Java实现万年历效果的具体代码,供大家参考,具体内容如下 要求: 综合运用GUI编程.事件处理.Calendar类应用等知识设计一款月历,要求能通过输入(或选择)年月的方式正确显示当前月份的所有日期. 一.分析需求: 1.设计一个窗体,该窗体为BorderLayout布局:2.窗体的中心添加一个Panel容器:Panel容器的布局是7行7列的GridLayout布局,Panel容器中放置49个标签,用来显示日历:3.实现判断是否是闰年:4.计算某一个月的天数:5.明白一个月

  • Java实现弹窗效果的基本操作

    本文为大家分享了Java实现弹窗效果的具体代码,供大家参考,具体内容如下 1.任务简介 本博客介绍两种Java弹窗操作的方法,第一个种是通过弹出对话框显示用户输入的信息,第二种是通过用户输入数字的不同打开不同的程序. 2.弹出对话框的操作 1)任务内容 编程实现一个命令窗程序,使得: 输入"A"则在屏上回显"Your input is A" 输入"我"则在屏上回显"Your input is 我" 等等. 输入ByeBye则退

  • Java实现弹窗效果的基本操作(2)

    本文为大家分享了Java实现弹窗效果的实现代码,供大家参考,具体内容如下 1.任务简介 我在5月23日写过一篇文章为<Java弹窗操作>,从目前来看浏览量不错,故我将之前省略了的两个程序分享出来,同时也将更多的方法分享出来,供大家交流学习. 注:该部分任务我是5月完成的,可从LICEcap截图中看到. 2.程序代码 (1)任务1 1)任务内容 编程实现一个命令窗程序,使得: 输入"A"则在屏上回显A字符的ASCII码. 输入"4"则在屏上回显4字符的AS

  • 简单了解JAVA内存区域效果知识

    这篇文章主要介绍了简单了解JAVA内存区域效果知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JAVA内存区域介绍 程序计数器: 线程私有,很小的内存空间,可以看做是当前线程所执行的字节码的行号指示器: 每个线程都有一个独立的程序计数器,各个线程之间的计数器相互不影响,独立存储: 如果线程执行的是Java 方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址,如果是一个Native方法,那么这个计数器的值则为undefined: 该内存

  • java实现时钟效果

    本文实例为大家分享了java实现时钟效果的具体代码,供大家参考,具体内容如下 实现效果如图: Java代码: 文件一:ClockPanel.java import static java.util.Calendar.HOUR; import static java.util.Calendar.MILLISECOND; import static java.util.Calendar.MINUTE; import static java.util.Calendar.SECOND; import j

  • C语言实现万年历效果

    本文实例为大家分享了C语言实现万年历的具体代码,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <string.h> #define str " SUN MON TUE WED THU FRI SAT " void menu(); //操作菜单 int leap(int year); //判断某年是不是闰年 int days_month(int year, int month)

  • Java局部打印效果不同问题解决方案

    项目中遇到了做局部打印的情况,最开始用的bootstrap,可是实际显示的和打印的效果就不一样了,于是就只能换一种方式了. 打印是用的jqprint 这个插件,很简单好用的插件. 引入两个js就可以了 <script type="text/javascript" src="/js/appjs/common/print/jquery-1.4.4.min.js"></script> <script type="text/javas

  • java实现的满天星效果实例

    本文实例讲述了java实现满天星效果的方法.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: import java.awt.*; public class Main {         public static void main(String[] args) {                 Frame frame = new Frame("满天星");                 MyPanel panel = new MyPanel();        

随机推荐