天堂的另一角

Addone的原创技术博客。范畴:Linux,软件开发,软件介绍,开源软件,人工智能。

 

我做的一个Java日历组件

最近用java做一个很简单的桌面应用,居然发现连一个好用的日历组件/控件都找不到,郁闷……
于是自己做了一个简单的,现在放出来共享吧!
呃……其实这个也不完全是自己做的,修改自一个网上下回来的日历组件(似乎是多年前开发的了),不过原版不是很好用,我进行了重构和增强,估计已经很难看出跟原版的关系了……

这个组件以jar的形式发布,源代码也在里面。直接运行即可看到演示效果。
由于使用了枚举(enum),所以需要java5.0才能编译运行。
大家可以随便使用、修改,不过最好把修改后的源码发回来给我,谢谢啦!

以下运行截图均运行于Kubuntu Linux 5.10+JRE 5.0系统中。
直接运行效果:
r_jcalendar1.png

实例效果(使用了第三方laf):
r_jcalendar2.png

点击这里下载

基本功能

可以选择日期,直接选择当天;
支持在改变日期时以及选择日期后的简单事件处理。

编程接口

组件使用Eclipse3.1.1+JDK5.0开发并测试通过。
所有类放在包:addone.publics.gui.calendar中:
  • WeekDay类:操作周日的Enum
  • CalendarColors类:定义了日历的外观颜色常数
  • CellSelectionListener类:选中表格单元格后的侦听器
  • CellChangeListener类:表格单元格改变后的侦听器
  • CalendarSelectionListener类:在日历中选中日期后的侦听器
  • CellChangeListener类:日历日期改变后的侦听器
  • CalendarTable类:日历表格,封装了表格操作方法,继承自JTable
  • CalendarPanel类:日历面板,封装了大部分的组件操作方法,继承自JPanel
基本用法(CalendarPanel类):
CalendarPanel():构造一个以星期天为每周的第一天的日历
CalendarPanel(WeekDay):构造一个以WeekDay为每周的第一天的日历
WeekDay getStartWeekDay():返回当前日历每周的第一天
Calendar getCalendar():返回组件内部当前的Calendar对象
void setCalendar(Calendar calendar):重新设置组件内部的calendar对象,并刷新日历
void setToday():日历跳转到当前日期,同时刷新日历
void setCalendarChangeListener(CalendarChangeListener listener):设置日历日期改变时的侦听器,当改变年份或月份时,以及选中日期但尚未跳转时触发
void setCalendarSelectionListener(CalendarSelectionListener listener):设置日历日期选中时的侦听器,当直接在日历中选中日期并跳转后,或者直接回到今天时触发

如果需要改变日历的外观颜色,直接修改CalendarColors类中的颜色常数即可。

简单示例


以下代码创建了一个Frame,其中放置了一个日历组件,日历设置为以星期一为每周的第一天。
public class CalendarFrame extends JFrame {
    
private CalendarPanel myCalendar;

    
public CalendarFrame() {
        initCalendar();
        initFrame();
        pack();
    }

    
private void initCalendar() {
        myCalendar 
= new CalendarPanel(WeekDay.MONDAY);
        myCalendar.setCalendarSelectionListener(
new CalendarSelectionListener() {
            
public void calendarSelected(Calendar currentCalendar) {
                System.out.println(currentCalendar.get(Calendar.YEAR)
+"-"
                    
+(currentCalendar.get(Calendar.MONTH)+1)+"-"
                    
+currentCalendar.get(Calendar.DATE));
            };
        });
        myCalendar.setCalendarChangeListener(
new CalendarChangeListener() {
            
public void calendarChanged() {
                System.out.println(
"Changing");
            };
        add(myCalendar);
    }

    
private void initFrame() {
        setTitle(
"日历");
        setSize(
400172);
        setResizable(
false);
        setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
    }
}

posted on 2006-04-01 02:39 Addone 阅读(1205) 评论(0)  编辑 收藏 引用 所属分类: 软件开发开源项目



标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
 
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
相关链接:



导航

统计

公告


Addone,又名:天堂鱿鱼。
这里是我的技术博客。其他文章
作为“杂感”分类存档。
新思想文章请访问我的别舍:
只谈思想

欢迎光临

Linux注册用户

推荐使用Firefox 3
feedsky
抓虾
google reader
bloglines


联系方式




My status

常用链接

留言簿(7)

随笔分类(62)

随笔档案(47)

相册

友情链接

推荐站点

搜索

积分与排名

最新评论

阅读排行榜