create a new class FixLengthDocument extends PlainDocument, override public void insertString(int offs, String str, AttributeSet a) throws BadLocationException 
to check string length, for full example, see the following code snippet.
import java.awt.*;
import javax.swing.*;
import java.util.*;
import javax.swing.text.*;
import java.awt.event.*;public class TimeControl extends JPanel
{
private FixLenthTextField inYear;
private FixLenthTextField inMonth;
private FixLenthTextField inDay;
private FixLenthTextField inHour;
private FixLenthTextField inMinute;
private FixLenthTextField inSecond;
private JLabel  sDeli;
public TimeControl()
{
createControl();
}
public void setColor(Color bkclr,Color foreclr)
{
super.setBorder(BorderFactory.createEmptyBorder());
super.setBackground(bkclr);
Container c=this;
Component[] components=c.getComponents();
if(components==null)
return;
int num=components.length;
for(int i=0;i<num;i++)
{
components[i].setBackground(bkclr);
components[i].setForeground(foreclr);
if(components[i] instanceof JTextField)
{
JTextField jc=(JTextField)components[i];
jc.setBorder(BorderFactory.createEmptyBorder());
jc.setCaretColor(foreclr);

}
}
}
public Calendar getTime()
{ //should only use value of hour:minute:second
Calendar cal=Calendar.getInstance();
cal.set(cal.HOUR,getField(cal.HOUR));
cal.set(cal.MINUTE,getField(cal.MINUTE));
cal.set(cal.SECOND,getField(cal.SECOND));
return cal;

}
public void setTime(Calendar c)
{ //only values of hour:minute:second of calendar object are used
if(c!=null)
{
setStrField(Calendar.HOUR,""+c.get(Calendar.HOUR));
setStrField(Calendar.MINUTE,""+c.get(Calendar.MINUTE));
setStrField(Calendar.SECOND,""+c.get(Calendar.SECOND));
}
}
public int getField(int fieldid)
{ //parameter in: Calendar.HOUR,Calendar.MINUTE,Calendar.SECOND
int nret=0;
try
{
nret=Integer.parseInt(getStrField(fieldid));
}
catch(Exception e)
{
setStrField(fieldid,"0");
}
return nret;
}
private String getStrField(int fieldid)
{ //return null if parameter is wrong
//valid fieldid : Calendar.HOUR,Calendar.MINUTE,Calendar.SECOND
String sret=null;
switch(fieldid)
{
case Calendar.HOUR:
sret=inHour.getText();
break;
case Calendar.MINUTE:
sret=inMinute.getText();
break;
case Calendar.SECOND:
sret=inSecond.getText();
break;
default:
break;
}
return sret;
}
private void setStrField(int fieldid,String s)
{
//valid fieldid : Calendar.HOUR,Calendar.MINUTE,Calendar.SECOND
switch(fieldid)
{
case Calendar.HOUR:
inHour.setText(s);
break;
case Calendar.MINUTE:
inMinute.setText(s);
break;
case Calendar.SECOND:
inSecond.setText(s);
break;
default:
break;
}
}
private void createControl()
{
inYear = new FixLenthTextField(4);
inMonth=new FixLenthTextField(2);
inDay=new FixLenthTextField(2);
inHour=new FixLenthTextField(2);
inMinute=new FixLenthTextField(2);
inDay = new FixLenthTextField(2);
inSecond=new FixLenthTextField(2);
setControlValueRange();
Container container=this;
container.setLayout(new GridBagLayout());
GridBagConstraints gbc=new GridBagConstraints();
gbc.gridx=0;
gbc.gridy=0;
container.add(inHour,gbc);
gbc.gridx++;
container.add(new JLabel(":"),gbc);
gbc.gridx++;
container.add(inMinute,gbc);
gbc.gridx++;
container.add(new JLabel(":"),gbc);
gbc.gridx++;
container.add(inSecond,gbc);
}
private void setControlValueRange()
{
inMonth.setValueRange(1,12);
inDay.setValueRange(1,31);
inHour.setValueRange(0,23);
inMinute.setValueRange(0,59);
inSecond.setValueRange(0,59);

}
public static void main(String args[])
{
JFrame jf=new JFrame();
Container c=jf.getContentPane();
c.setLayout(new FlowLayout());
final TimeControl timectrl=new TimeControl();
timectrl.setColor(Color.black,Color.red);
c.add(timectrl);
JButton jb=new JButton("get time");
jb.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println(timectrl.getTime());
}
});
c.add(jb);
jf.setSize(400,400);
jf.setVisible(true);
}
class FixLenthTextField extends JTextField
{
private int nMaxVal;//max value can be allowed to enter
private int nMinVal;
public FixLenthTextField(int cols) 
{
super(cols);
nMaxVal=Integer.MAX_VALUE;
nMinVal=Integer.MIN_VALUE;
System.out.println("if it works,it is written by masterz, otherwise I don't know who write it");
}
public void setValueRange(int nmin,int nmax)
{
nMaxVal=nmax;
nMinVal=nmin;
}
private int isValidValue(String s)
{
//return 0: OK
//return 1: void string
//return -1: not number
//return -2: exceed max
//return -3: exceed min
if(s==null||s.length()<1)
return 1;
int nret=0;
try
{
int nval=Integer.parseInt(s);
if(nval>nMaxVal)
nret=-2;
else
if(nval<nMinVal)
nret=-3;
}
catch(Exception e)
{
nret=-1;
}
return nret;
}
protected Document createDefaultModel() 
{
return new FixLengthDocument();
}

class FixLengthDocument extends PlainDocument 
{

public void insertString(int offs, String str, AttributeSet a) 
throws BadLocationException 
{
if (str == null||str.length() <1)
return;
int strlen=str.length();
try
{
int test=Integer.parseInt(str);
}
catch(NumberFormatException e)
{
doBeep();
return;
}
int maxlen=FixLenthTextField.this.getColumns();
super.insertString(offs, str, a);
int len=getLength();
if(len>maxlen)
{
this.remove(maxlen,len-maxlen);
len=maxlen;
}
String scontent=super.getText(0,len);
if(isValidValue(scontent)>=0)
{
return;
}
while(scontent!=null&&scontent.length()>0)
{
if(len>0)
{
len--;
scontent=scontent.substring(0,len);
if(isValidValue(scontent)>=0)
{
break;
}

}
else
break;
}
super.remove(0,super.getLength());
if(scontent!=null)
super.insertString(0,scontent,a);

}
protected void doBeep()
{
Toolkit.getDefaultToolkit().beep();
}

}

}
}