繁体中文
设为首页
加入收藏
当前位置:JSP技术首页 >> 资料/其它 >> 格式化输入日期时间控件 JieFormattedDateBox

格式化输入日期时间控件 JieFormattedDateBox

2005-03-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:格式化输入日期时间控件 可以用JieFormattedDateBox box = new JieFormattedDateBox("yyyy年MM月dd日HH点mm分ss秒");输入 也可以用JieFormattedDateBox box = new JieFormattedDateBox("HH:mm:ss");来输入时间 还...

格式化输入日期时间控件

可以用JieFormattedDateBox box = new JieFormattedDateBox("yyyy年MM月dd日HH点mm分ss秒");输入

也可以用JieFormattedDateBox box = new JieFormattedDateBox("HH:mm:ss");来输入时间

还可以这样用JSPinner spinner = new JSPinner();JieFormattedDateBox fdb = new JieFormattedDateBox(format);spinner.setModel(fdb);spinner.setEditor(fdb);

/////////////////////////////////////////////////package org.jie.ui.formattedbox;

import java.sql.Timestamp;import java.text.SimpleDateFormat;

import java.awt.event.FocusEvent;import java.awt.event.FocusListener;import javax.swing.JFormattedTextField;import javax.swing.SpinnerModel;import javax.swing.SwingConstants;import javax.swing.SwingUtilities;import javax.swing.event.ChangeListener;import javax.swing.event.DocumentEvent;import javax.swing.event.DocumentListener;import javax.swing.text.DefaultFormatterFactory;import javax.swing.text.MaskFormatter;

public class JieFormattedDateBox extends JFormattedTextField implements SpinnerModel{

private String format; private SimpleDateFormat timeFormat; private Timestamp time;

public void setTime(Timestamp time){ if(time != null) setValue(time); } public Timestamp getTime(){ return time; }

public static String replace(String src,String replaceSrc,String replaceWith){ if(src == null) return null; StringBuffer sb = new StringBuffer(); int start = 0; int end = src.indexOf(replaceSrc); while(end >= 0){ sb.append(src.substring(start,end)); start = end+replaceSrc.length(); end = src.indexOf(replaceSrc,start); sb.append(replaceWith); } sb.append(src.substring(start)); return sb.toString(); }

public JieFormattedDateBox(String format){ super(); this.format = format; timeFormat = new SimpleDateFormat(format); time = new Timestamp(System.currentTimeMillis());

try{ String mask = format; for(int i=0;i

setText(timeFormat.format(time)); this.getDocument().addDocumentListener(new DocumentListener(){ public void insertUpdate(DocumentEvent e){ checkTime(); } public void removeUpdate(DocumentEvent e){ checkTime(); } public void changedUpdate(DocumentEvent e){} }); this.setHorizontalAlignment(SwingConstants.RIGHT); this.addFocusListener(new FocusListener(){ public void focusGained(FocusEvent e){} public void focusLost(FocusEvent e){ setValue(time); } }); }

void checkTime(){ try{ String text = getText(); if(text == null || text.equals("")) return; time = new Timestamp(timeFormat.parse(text).getTime()); }catch(Exception ex){ try{ SwingUtilities.invokeLater(new Runnable() { public void run() { setValue(time); } }); }catch(Exception e){} }

}

public Object getValue(){ return this.getText(); } public void setValue(Object value){ time = (Timestamp)value; int index = this.getCaretPosition(); if(time == null){ this.setText(""); }else this.setText(timeFormat.format(time)); this.setCaretPosition(index);//keep Caret Position } public Object getNextValue(){ return new Timestamp(time.getTime()+getIncrease(this.getCaretPosition(),format,time)); } public Object getPreviousValue(){ return new Timestamp(time.getTime()-getDecrease(this.getCaretPosition(),format,time)); } public void addChangeListener(ChangeListener l){} public void removeChangeListener(ChangeListener l){}

static String[] alais = {"yyyy","MM","dd","HH","hh","mm","ss"}; static String[] formats = {"####","##","##","##","##","##","##"}; static long[] times = {0,0,86400000,3600000,3600000,60000,1000}; public static final SimpleDateFormat fullTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

public static long getDecrease(int caret,String format,Timestamp time){ if(testAlias(format,caret,0)){ try{ String timeStr = (Integer.parseInt(new SimpleDateFormat("yyyy").format(time)) - 1) + "-" + new SimpleDateFormat("MM-dd HH:mm:ss").format(time); return time.getTime() - fullTimeFormat.parse(timeStr).getTime(); }catch(Exception e){ return 1000; } } else if(testAlias(format,caret,1)){ try{ SimpleDateFormat ym = new SimpleDateFormat("yyyy-MM"); long thisMonth = ym.parse(ym.format(time)).getTime(); long lastMonth = ym.parse(ym.format(new Timestamp(thisMonth-2*times[2]))).getTime();

int days = (int)((thisMonth-lastMonth)/times[2]); int thisDays = Integer.parseInt(new SimpleDateFormat("dd").format(time)); return (thisMonth-lastMonth)+(((thisDays > days)?(thisDays-days):0)*times[2]); }catch(Exception e){ return 1000; } } for(int i=2;i

public static long getIncrease(int caret,String format,Timestamp time){ if(testAlias(format,caret,0)){ try{ String timeStr = (Integer.parseInt(new SimpleDateFormat("yyyy").format(time)) + 1) + "-" + new SimpleDateFormat("MM-dd HH:mm:ss").format(time); return fullTimeFormat.parse(timeStr).getTime() - time.getTime(); }catch(Exception e){ return 1000; } } else if(testAlias(format,caret,1)){ try{ SimpleDateFormat ym = new SimpleDateFormat("yyyy-MM"); long thisMonth = ym.parse(ym.format(time)).getTime(); long nextMonth = ym.parse(ym.format(new Timestamp(thisMonth+31*times[2]))).getTime(); long nextNextMonth = ym.parse(ym.format(new Timestamp(nextMonth+31*times[2]))).getTime();

int days = (int)((nextNextMonth-nextMonth)/times[2]); int thisDays = Integer.parseInt(new SimpleDateFormat("dd").format(time)); return (nextMonth-thisMonth)-(((thisDays > days)?(thisDays-days):0)*times[2]); }catch(Exception e){ return 1000; } } for(int i=2;i

private static boolean testAlias(String format,int caret,int index){ for(int i=format.indexOf(alais[index]);i>=0;i=format.indexOf(alais[index],i+1)){ if(caret >= i && caret <= i+alais[index].length()) return true; } return false; }

}

责任编辑:admin
相关文章