/**
*
*/
package components;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.IllegalComponentStateException;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.JWindow;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
*
* @author bruceWoo
*
*/
public class JDatetimeField1_4 extends JTextField {
/**
*
*/
private static final long serialVersionUID = -115150489889278289L;
/**
* 默认的日期时间格式
*/
private static final String DEFAULT_DFT="yyyy-MM-dd HH:mm:ss";
private static final int INVALID_DATE=-1;
private static final String LONG_DATE_PATTERN="(.)*yyyy(.)*M{1,2}(.)*d{1,2}(.)*";
private static final int LONG_DATE=6;
private static final String MEDIUM_DATE_PATTERN="(.)*yy(.)*M{1,2}(.)*d{1,2}(.)*";
private static final int MEDIUM_DATE=7;
private static final String SHORT_DATE_PATTERN="(.)*M{1,2}(.)*d{1,2}(.)*";
private static final int SHORT_DATE=8;
private static final String LONG_DATE_TIME_PATTERN="(.)*yyyy(.)*M{1,2}(.)*d{1,2}(.)*(H{1,2}|h{1,2})(.)*m{1,2}(.)*s{1,2}(.)*";
private static final int LONG_DATE_TIME=0;
//private static final String LONG_DATETIME_PATTERN1="(.)*yyyy(.)*M{1,2}(.)*d{1,2}(.)*h{1,2}(.)*m{1,2}(.)*s{1,2}(.)*";
private static final String LONG_DATE_MEDIUM_TIME_PATTERN="(.)*yyyy(.)*M{1,2}(.)*d{1,2}(.)*(H{1,2}|h{1,2})(.)*m{1,2}(.)*";
private static final int LONG_DATE_MEDIUM_TIME=1;
// private static final String LONG_DATE_MEDIUM_TIME_PATTERN1="(.)*yyyy(.)*M{1,2}(.)*d{1,2}(.)*h{1,2}(.)*m{1,2}(.)*";
private static final String MEDIUM_DATE_LONG_TIME_PATTERN="(.)*yy(.)*M{1,2}(.)*d{1,2}(.)*(H{1,2}|h{1,2})(.)*m{1,2}(.)*s{1,2}(.)*";
private static final int MEDIUM_DATE_LONG_TIME=2;
//private static final String MEDIUM_DATE_LONG_TIME_PATTERN1="(.)*yy(.)*M{1,2}(.)*d{1,2}(.)*h{1,2}(.)*m{1,2}(.)*s{1,2}(.)*";
private static final String MEDIUM_DATE_MEDIUM_TIME_PATTERN="(.)*yy(.)*M{1,2}(.)*d{1,2}(.)*(H{1,2}|h{1,2})(.)*m{1,2}(.)*";
private static final int MEDIUM_DATE_MEDIUM_TIME=3;
//private static final String MEDIUM_DATE_MEDIUM_TIME_PATTERN1="(.)*yy(.)*M{1,2}(.)*d{1,2}(.)*h{1,2}(.)*m{1,2}(.)*";
private static final String SHORT_DATE_LONG_TIME_PATTERN="(.)*M{1,2}(.)*d{1,2}(.)*(H{1,2}|h{1,2})(.)*m{1,2}(.)*s{1,2}(.)*";
private static final int SHORT_DATE_LONG_TIME=4;
private static final String SHORT_DATE_MEDIUM_TIME_PATTERN="(.)*M{1,2}(.)*d{1,2}(.)*(H{1,2}|h{1,2})(.)*m{1,2}(.)*";
private static final int SHORT_DATE_MEDIUM_TIME=5;
//private static final String SHORT_DATE_MEDIUM_TIME_PATTERN1="(.)*M{1,2}(.)*d{1,2}(.)*h{1,2}(.)*m{1,2}(.)*";
/**
* 每周天数
*/
private static final int DAYS_PER_WEEK=7;
/**
* 星期的抬头
*/
private static final String[] TITLES={
"<html><font color='blue'>日</font></html>",
"<html><font color='blue'>一</font></html>",
"<html><font color='blue'>二</font></html>",
"<html><font color='blue'>三</font></html>",
"<html><font color='blue'>四</font></html>",
"<html><font color='blue'>五</font></html>",
"<html><font color='blue'>六</font></html>"};
/**
* 平年每个月天数
*/
private static final int[] DAYS_PER_MONTH={31,28,31,30,31,30,31,31,30,31,30,31};
/**
* 中文月份名常量
*/
private static final String[] MONTHS={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
/**
* 显示星期标题的JLabel列表
*/
private static final JLabel[] TITLE_LABELS=new JLabel[TITLES.length];
/**
* 当前日期时间对象
*/
private Calendar datetime;
/**
* 当前日期格式
*/
private DateFormat dateFmt;
/**
* 触发日期选择面板的按钮
*/
//private JButton trigger;
private JLabel trigger;
/**
* 显示日期的文本区域
*/
private JTextField datetimeField;
/**
* 日期时间微调控件
*/
//private JSpinner datetimeField;
/**
* 日期选择面板
*/
private DatetimeDisplayPanel displayPanel;
/**
* 父对象,主要用来加入鼠标单击事件,用来正确在前方展示日期显示面板
*/
private Container parent;
/**
* 参考控件移动前的左上角在屏幕上坐标
*/
private Point lastPoint;
/**
* 显示日期的格式
*/
private int displayPattern;
/**
* 由于无法跟踪JFrame等顶级窗口的mouseDragged事件,故使用一个定时器来模拟跟踪窗口移动事件
*/
private Timer timer;
public JDatetimeField1_4(Calendar datetime,String pattern) throws IllegalArgumentException
{
displayPattern=analysePattern(pattern);
if(INVALID_DATE==displayPattern)
throw new IllegalArgumentException("指定的日期时间格式无效");
this.datetime=datetime;
this.dateFmt=new SimpleDateFormat(pattern);
this.setLayout(new BorderLayout());
ImageIcon icon = new ImageIcon(this.getClass().getResource("/images/calendar.jpg"));
trigger=new JLabel(icon);
//trigger.setSize(30,28);
trigger.setToolTipText("请选择日期");
datetimeField=new JTextField();
datetimeField.setHorizontalAlignment(CENTER);
datetimeField.setEditable(false);
datetimeField.setText(dateFmt.format(datetime.getTime()));
//add(dateField,BorderLayout.WEST);
add(datetimeField,BorderLayout.CENTER);
add(trigger,BorderLayout.EAST);
trigger.addMouseListener(new MouseAdapter()
{
private void showDisplayPanel()
{
if(null==displayPanel)
{
MouseListener listener=new MouseClickListener();
JDatetimeField1_4.this.addMouseListenerToAllChildComponents(listener);
parent=SwingUtilities.getWindowAncestor(JDatetimeField1_4.this);
if(null==parent)
displayPanel=new DatetimeDisplayPanel();
else
{
displayPanel=new DatetimeDisplayPanel((Window)parent);
}
}
layDatetimeDisplayPanel();
displayPanel.setVisible(true);
}
public void mouseEntered(MouseEvent e)
{
//showDisplayPanel();
}
public void mouseClicked(MouseEvent e)
{
showDisplayPanel();
}
});
//追踪JFrame等顶级窗口的mouseDragged事件,因为顶级窗口的mouseDragged事件由本地事件处理程序来处理
//java程序是追踪不到这些窗口的mouseDragged事件的,这里用一个定时器在日期选择控件可见时不断检测参考控件
//在屏幕上坐标变化来确认是否发生mouseDragged事件
timer=new Timer(10,new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(!displayPanel.isVisible())
{
if(timer.isRunning())
timer.stop();
return;
}
try
{
Point curPoint=JDatetimeField1_4.this.getLocationOnScreen();
if(!curPoint.equals(lastPoint))
{
if(null!=lastPoint&&displayPanel.isVisible())
displayPanel.setVisible(f
没有合适的资源?快使用搜索试试~ 我知道了~
Swing日期时间选择器(包括选择日期和时间)
共28个文件
class:20个
java:3个
jpg:2个
4星 · 超过85%的资源 需积分: 49 86 下载量 64 浏览量
2011-03-23
23:21:45
上传
评论
收藏 48KB ZIP 举报
温馨提示
本文件是一个Java Swing 日期,时间选择器示例,抱括日期选择,时间选择
资源推荐
资源详情
资源评论
收起资源包目录
JDatetimeField.zip (28个子文件)
JDatetimeField
.project 390B
bin
components
TestFrame$ClickListener1.class 846B
JDatetimeField1_4.class 11KB
TestFrame$1.class 848B
JDatetimeField1_4$DatetimeDisplayPanel$HourChgListener.class 2KB
JDatetimeField1_4$DatetimeDisplayPanel$SecChgListener.class 2KB
JDatetimeField1_4$1.class 2KB
JDatetimeField1_4$4.class 2KB
JDatetimeField1_4$2.class 2KB
JDatetimeField1_4$MouseClickListener.class 1KB
TestDT.class 583B
JDatetimeField1_4$DatetimeDisplayPanel$CircleSpinnerNumberModel.class 1KB
JDatetimeField1_4$3.class 2KB
JDatetimeField1_4$DatetimeDisplayPanel$ChooseDayListener.class 3KB
JDatetimeField1_4$DatetimeDisplayPanel$MinChgListener.class 2KB
JDatetimeField1_4$DatetimeDisplayPanel.class 9KB
TestFrame$ClickListener2.class 846B
TestFrame.class 3KB
other
DateChooserJButton.class 3KB
DateChooserJButton$DateChooser.class 10KB
DateChooserJButton$1.class 1KB
images
calendar.jpg 2KB
.settings
org.eclipse.jdt.core.prefs 633B
src
components
JDatetimeField1_4.java 27KB
TestDT.java 3KB
other
DateChooserJButton.java 13KB
images
calendar.jpg 2KB
.classpath 301B
共 28 条
- 1
zyz3000c
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页