改写的日历小程序(Java)

简介:
读了 博远至静 博客中  Java写一个日历小程序-代码  一文,兴致顿生,饶有兴致的读了代码 小日历的改进  ,自己根据此日历程序的 UI 设计,改写了一个日历小程序。
我使用传统的 MVC 结构,设计了 3 个类。(具体代码和工程见附件)
CalendarViewer.java 主要处理 UI ,沿用了已有代码,整理之并抽出业务逻辑,使其专注于显示层处理。
CalendarViewer.java
public   class  CalendarViewer  extends  JWindow  implements  ActionListener {
    JPanel  calendarYmPanel  =  null ;
    JButton  leftButton  =  new  JButton( "<<" );
    JButton  rightButton  =  new  JButton( ">>" );
    Label  yearLabel  =  new  Label();
    Label  monthLabel  =  new  Label();
    Label  passedDaysLabel  =  new  Label();
    JPanel  calendarWdPanel  =  null ; //  caledar_week calendar_days 的总包容体
    JPanel  calendarWeekPanel  =  null ; //  针对周列的布局
    JPanel  calendarDaysPanel  =  null ; //  针对日期列的布局
    JPanel  calendarExitPanel  =  null ;
    JButton  quitButton  =  new  JButton( " 关闭 " );
    Border  emptyBorder  = BorderFactory.createEmptyBorder();
 
    CalendarController  cController  =  new  CalendarController();
 
     public  CalendarViewer() {
        super ();
       buildUI();
    }
 
     public   void  buildUI() {
       buildTopPanel();
       buildCenterPanel();
       buildBottomPanel();
       setLayout( new  BorderLayout());
        。。。。。。
    }
 
     private   void  buildTopPanel() { 。。。。。。 }
 
     private   void  buildCenterPanel() { 。。。。。。 }
 
     private   void  buildBottomPanel() { 。。。。。。 }
 
     public  JPanel updateDaysPanel() { 。。。。。。 }
 
     public   void  updatePassedDaysLabel() { 。。。。。。 }
 
     public   void  actionPerformed(ActionEvent e) { 。。。。。。 }
 
     public   static   void  main(String[] args) {
       SwingUtilities.invokeLater( new  Runnable() {
            public   void  run() {
               new  CalendarViewer();
           }
       });
    }
}
 
 
UI 构造主要分 3 块,对应图上中下 3 panel
buildTopPanel();
buildCenterPanel();
buildBottomPanel();
事件监听的处理由下面方法完成。
actionPerformed(ActionEvent e);
基于事件的 UI 更新由以下两个方法完成。
updateDaysPanel();
updatePassedDaysLabel();
CalendarController.java 主要处理具体的业务逻辑,而所使用的一些与具体应用无关的日历算法逻辑则交给 CalendarModel.java
CalendarModel.java
public   class  CalendarModel {
     private   int   daytab [][] = {
           { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
           { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } };
 
     public   boolean  isLeapYear( int  year) {
        return  ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0);
    }
 
     public   int  dayOfYear( int  day,  int  month,  int  year) {
        int  leap = isLeapYear(year) ? 1 : 0;
        for  ( int  i = 1; i < month; i++)
           day +=  daytab [leap][i];
        return  day;
    }
 
     public   int  daysOfMonth( int  month,  int  year) {
        int  leap = isLeapYear(year) ? 1 : 0;
        return   daytab [leap][month];
    }
 
     public   int  dayOfWeek( int  day,  int  month,  int  year) {
        if  (month == 1) {
           month = 13;
           year--;
       }
        if  (month == 2) {
           month = 14;
           year--;
       }
        return  (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year
              / 100 + year / 400) % 7 + 1;
    }
}
建立一个二维数组,分别表示闰年与非闰年的每月天数。主要方法有:
boolean  isLeapYear(int year); 判断闰年
dayOfYear(int day, int month, int year); 计算所提供日期为当前 year 的第几天
daysOfMonth(int month, int year); 返回当前月份的天数
dayOfWeek(int day, int month, int year);   计算某年某月某日是星期几,这里使用了基姆拉尔森计算公式。
基姆拉尔森计算公式
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7



1
2 月换算为去年的 13 14 月计算
w=0
是星期一,依次类推。

本文转自zhangjunhd51CTO博客,原文链接:http://blog.51cto.com/zhangjunhd/127768,如需转载请自行联系原作者
相关文章
|
4月前
|
人工智能 监控 安全
智慧工地解决方案,java智慧工地程序代码
智慧工地系统融合物联网、AI、大数据等技术,实现对施工现场“人、机、料、法、环”的全面智能监控与管理,提升安全、效率与决策水平。
131 2
|
2月前
|
安全 Java
Java异常处理:程序世界的“交通规则
Java异常处理:程序世界的“交通规则
319 98
|
3月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
3月前
|
存储 Java 编译器
对比Java学习Go——程序结构与变量
本节对比了Java与Go语言的基础结构,包括“Hello, World!”程序、代码组织方式、入口函数定义、基本数据类型及变量声明方式。Java强调严格的面向对象结构,所有代码需置于类中,入口方法需严格符合`public static void main(String[] args)`格式;而Go语言结构更简洁,使用包和函数组织代码,入口函数为`func main()`。两种语言在变量声明、常量定义、类型系统等方面也存在显著差异,体现了各自的设计哲学。
|
9月前
|
Java C语言
课时8:Java程序基本概念(标识符与关键字)
课时8介绍Java程序中的标识符与关键字。标识符由字母、数字、下划线和美元符号组成,不能以数字开头且不能使用Java保留字。建议使用有意义的命名,如student_name、age。关键字是特殊标记,如蓝色字体所示。未使用的关键字有goto、const;特殊单词null、true、false不算关键字。JDK1.4后新增assert,JDK1.5后新增enum。
178 4
|
9月前
|
搜索推荐 Java Android开发
课时146:使用JDT开发Java程序
在 Eclipse 之中提供有 JDT环境可以实现java 程序的开发,下面就通过一些功能进行演示。 项目开发流程
309 0
|
9月前
|
Java 编译器
课时7:Java程序基本概念(注释)
课时7介绍了Java程序中的注释。编程语言有其语法和语义,注释有助于理解代码需求,防止断档。Java支持三类注释:单行(//)、多行(/* */)和文档注释(/** */)。注释不会被编译器编译。范例中展示了如何在代码中使用注释,并强调了注释对项目文档管理的重要性。
192 3
|
10月前
|
存储 小程序 前端开发
微信小程序与Java后端实现微信授权登录功能
微信小程序极大地简化了登录注册流程。对于用户而言,仅仅需要点击授权按钮,便能够完成登录操作,无需经历繁琐的注册步骤以及输入账号密码等一系列复杂操作,这种便捷的登录方式极大地提升了用户的使用体验
2974 12
|
11月前
|
传感器 安全 算法
消防救援支队消防员单兵装备智能养护舱电机驱动java版程序(二)
本文探讨消防救援中智能养护舱电机驱动的Java程序设计,作为系列文章第二部分。通过自动化和智能化手段,智能养护舱提升了装备维护效率与准确性。文章详细介绍了电机驱动模块的设计与实现,包括硬件选型、PID控制策略、安全保护机制及Java程序架构,确保电机精确控制、稳定性和安全性。未来将优化功能并引入智能算法和物联网技术,进一步提升装备维护智能化水平。

热门文章

最新文章