给个可以格式化输入日期时间的可以用
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<alais.length;i++){
                mask = replace(mask,alais[i],formats[i]);
            }
            MaskFormatter mf = new MaskFormatter(mask);
            mf.setPlaceholderCharacter('_');
            setFormatterFactory(new DefaultFormatterFactory(mf));
        }catch(Exception e){
            e.printStackTrace();
        }        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<alais.length;i++){
            if(testAlias(format,caret,i)){
                return times[i];
            }
        }
        return 1000;
    }    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<alais.length;i++){
            if(testAlias(format,caret,i)){
                return times[i];
            }
        }
        return 1000;
    }    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;
    }}