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;
}
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();
}

}

}

解决方案 »

  1.   

    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);
    }
    }
      

  2.   

    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);
    }
    }
      

  3.   

    去看看这个,应该能得到答案:
    http://www.csdn.net/expert/topic/973/973510.xml?temp=.4842035
      

  4.   

    呼吁所有在csdn流浪的人向五颗红星学习!!!