|
||||||||||||
|
|
| Java日历组件及使用示例 |
| 时间:22/04/2007 作者:网络 来源:网络 |
| 小提示→点这里把文章加入您的收藏夹,方便下次查看 |
| 设置文章字体大小:[大 中 小] |
|
本文介绍近期写的两个日历相关的组件,MonthlyCalendar和DateChooser,其使用方法,并附上一个demo程序。 『Demo文件』 附件:CalendarDemo1.4.2_07.jar(36K)Demo程序包含class文件和源代码,用j2sdk1.4.2_07编译打包。里面包含文中提到组件类的API文档的缩略版。详细文档可以用javadoc从demo文件中包含的源代码生成。 『MonthlyCalendar组件』 MonthlyCalenar是一个JComponent的子类(extends JComponent),按星期排列显示一个月的日期分部。其默认界面类似Windows XP默认界面的日历显示,如Figure 1(a) 所示。 同时,MonthlyCalendar实现了MouseListener和MouseMotionListener两个接口,用来监听其自身的鼠标事件。当鼠标停在一个日期时,该日期会以highlight方式显示。当鼠标在一个日期上点击时,可以认为是一个“日期选中事件”(为了简便,该事件并不是真正的AWT/Swing事件,只是一个假想的事件)发生。MonthlyCalendar里面有一个protected void dateSelected()的方法,其内容为空。当上述事件发生时(通过监控鼠标点击),该方法会被调用。因此,用户程序可以通过override该方法,来加入“事件响应代码”。 MonthlyCalendar提供了一些Bean Pattern的方法,提供个性化其界面风格的途径和日期的设置。总结来说,可设置的属性包括下面这些:
下面这段简单的代码展示如何使用MonthlyCalendar。一个日历组件和一个textfield被放在一个frame里面,当日期被选中时,所选日期会被显示在textfield里面。 import hysun.util.MonthlyCalendar; import javax.swing.*; import java.awt.*; public class TestMC extends JFrame { public TestMC() { final JTextField textfield = new JTextField(); getContentPane().add(textfield, BorderLayout.NORTH); MonthlyCalendar mc = new MonthlyCalendar() { protected void dateSelected() { textfield.setText(getYear()+"."+getMonth()+"."+getSelectedDay()); } }; mc.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); mc.setYearMonth(2005, 2); getContentPane().add(mc); setDefaultCloseOperation(EXIT_ON_CLOSE); pack(); setLocationRelativeTo(null); } public static void main(String args[]) { new TestMC().setVisible(true); } } 对于MonthlyCalendar组件,用户可以弃用其日期选择的功能,只是使用其图形界面。demo程序里面第一个demo就是利用它生成一个年历。 以前也见到过别人写的一些日期选择组件,是在一个panel里面放了大量的label,通过GridLayout布局,每一个label用来显示一天或者显示一个星期日期的显示,由于需要创建大量的对象,需要较多资源。MonthlyCalendar本身是一个JComponent,它里面没有加入其他组件(headerComponent除外),其界面全部通过Graphics类画出来,所需资源要少。 『DateChooser组件』 该组件是基于上述MonthlyCalendar组件构建的一个日期选择器。它本身是一个JDialog的子类,对话框里面除了一个MonthlyCalendar组件,还加入了对年份和月份的控制,基本界面如Figure 2所示。
DateChooser组件的使用非常简单,用户程序所需要用到的方法只有四个(当然,记得先创建一个DateChooser对象,创建方法跟JDialog一样):
长话短说,一个简单的working example如下: import hysun.util.DateChooser; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.text.SimpleDateFormat; public class TestDC extends JFrame { private static final SimpleDateFormat FORMATTER = new SimpleDateFormat("yyyy.MM.dd"); public TestDC() { final DateChooser dc = new DateChooser(this, true); final JTextField textfield = new JTextField(); getContentPane().add(textfield, BorderLayout.NORTH); JPanel panel = new JPanel(); JButton button = new JButton("Select Date"); panel.add(button); getContentPane().add(panel); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { dc.setLocationRelativeTo(textfield); dc.setVisible(true); java.util.Calendar cal = dc.getSelectedDate(); if (cal != null) { textfield.setText(FORMATTER.format(cal.getTime())); } } }); pack(); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); } public static void main(String args[]) { new TestDC().setVisible(true); } } 由于DateChooser旨在提供最方便快捷的日期选择器,它使用MonthlyCalendar默认的界面,不提供个性化的Bean方法。但是用户可以很方便的利用MonthlyCalendar来构建个性化的日期选择器,包括其年份月份控制部分(在IDE里面,利用MonthlyCalendar的Bean Pattern方法,这是非常简单的工作)。 |
|
上一篇:做一个颜色渐变的Panel
下一篇:分享Swing学习的一些经验 |
| 【返回】 【顶部】 【关闭】 |
| Copyright © 2005-2010 www.594k.com All Rights Reserved. |
| 版权所有:JAVA学习网
备案序号:皖ICP备06004238号 |