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