天堂的另一角

天堂魷魚的原创技术博客。所謂兼容並包,無奇不有。

 

我做的一个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 阅读(4182) 评论(5)  编辑 收藏 引用 所属分类: 软件开发开源项目

评论

# re: 我做的一个Java日历组件[未登录] 2010-03-29 19:44 过客

怎么没源码?  回复  更多评论   

# re: 我做的一个Java日历组件[未登录] 2010-03-29 19:48 过客

可以发到邮箱吗?
mhshibei@163.com
谢谢!!!  回复  更多评论   

# re: 我做的一个Java日历组件 2010-03-29 22:55 Addone

@过客

源碼裡面有的。把那個jar文件解壓縮就可以看到了。  回复  更多评论   

# re: 我做的一个Java日历组件 2011-01-20 10:23

能不能教教jar怎么用阿   回复  更多评论   

# re: 我做的一个Java日历组件 2011-01-20 12:28 Addone

@阿
那个。。。和其他的第三方组件是一样的啊。
在Netbeans或者Eclipse里直接加入jar即可。
实在搞不定的话也可以把jar解压,把里面编译好的class文件或者源文件直接加到工程里也行。
示例代码在文中有了,直接使用CalendarPanel就行了。  回复  更多评论   

只有注册用户登录后才能发表评论。

导航

统计

公告


Addone,又名:天堂鱿鱼。
这里是我的技术博客。其他文章
作为“杂感”分类存档。
我的新思想主要发往新站:
幻想园
幻想园

欢迎光临

Linux注册用户

feedsky
抓虾
google reader
bloglines

联系方式




My status

常用链接

留言簿(11)

随笔分类(99)

随笔档案(69)

相册

友情链接

推荐站点

搜索

积分与排名

最新评论

阅读排行榜