From b5b1a5a6245bb28628741596a1d5a9ef3573b901 Mon Sep 17 00:00:00 2001 From: "John.Ying" Date: Fri, 12 Aug 2022 19:09:35 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-72634=20=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E5=8D=A1=E9=A1=BF=E4=BC=98=E5=8C=96=E4=B8=80=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/gui/date/JDateDocument.java | 104 +++++++++--------- 1 file changed, 54 insertions(+), 50 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/date/JDateDocument.java b/designer-base/src/main/java/com/fr/design/gui/date/JDateDocument.java index f2e159463f..86e35010c1 100644 --- a/designer-base/src/main/java/com/fr/design/gui/date/JDateDocument.java +++ b/designer-base/src/main/java/com/fr/design/gui/date/JDateDocument.java @@ -10,8 +10,9 @@ import javax.swing.text.JTextComponent; import javax.swing.text.PlainDocument; /** + * */ -public class JDateDocument extends PlainDocument{ +public class JDateDocument extends PlainDocument { private JTextComponent textComponent; //日期输入文本框 private SimpleDateFormat dateFormat; @@ -26,7 +27,7 @@ public class JDateDocument extends PlainDocument{ ** 调用者:类JDateDocument *******************************************************************/ public JDateDocument(JTextComponent tc, SimpleDateFormat dateFormat) throws - UnsupportedOperationException{ + UnsupportedOperationException { //当前日期构造 this(tc, dateFormat, getCurrentDate(dateFormat)); } @@ -34,40 +35,43 @@ public class JDateDocument extends PlainDocument{ public JDateDocument(JTextComponent tc, SimpleDateFormat dateFormat, String initDateTime) throws - UnsupportedOperationException{ + UnsupportedOperationException { //设置当前日期格式 setDateFormat(dateFormat); //保存操作的文本框 textComponent = tc; //设置显示为当前日期,同时完成显示的格式化 - try{ + try { insertString(0, initDateTime, null); - } catch(BadLocationException ex){ + } catch (BadLocationException ex) { throw new UnsupportedOperationException(ex.getMessage()); } } /** * 设置当前日期格式 + * * @param dateFormat SimpleDateFormat */ - public void setDateFormat(SimpleDateFormat dateFormat){ + public void setDateFormat(SimpleDateFormat dateFormat) { this.dateFormat = dateFormat; } /** * 取得当前日期格式 + * * @return SimpleDateFormat */ - public SimpleDateFormat getDateFormat(){ + public SimpleDateFormat getDateFormat() { return dateFormat; } /** * 取得当前系统日时 + * * @return String */ - public static String getCurrentDate(SimpleDateFormat smFormat){ + public static String getCurrentDate(SimpleDateFormat smFormat) { return smFormat.format(new Date()); } @@ -82,15 +86,15 @@ public class JDateDocument extends PlainDocument{ ** 调用者:类JDateDocument *******************************************************************/ public void insertString(int offset, String s, - AttributeSet attributeSet) throws BadLocationException{ + AttributeSet attributeSet) throws BadLocationException { String toTest; //用于测试输入合法性的字符串 //判断插入字符串长度 - if(s.length() == 1){ + if (s.length() == 1) { //长度为1 - try{ + try { //限制输入为整数 Integer.parseInt(s); - } catch(Exception ex){ + } catch (Exception ex) { //错误则提示并返回 Toolkit.getDefaultToolkit().beep(); return; @@ -98,14 +102,14 @@ public class JDateDocument extends PlainDocument{ //取得原始插入位置 int newOffset = offset; //如果插入位置为"/"," ","-"符号的前面,则移动到其后面插入(改变newOffset的值) - if(offset == 4 || offset == 7 || + if (offset == 4 || offset == 7 || offset == 10 || offset == 13 || - offset == 16){ + offset == 16) { newOffset++; textComponent.setCaretPosition(newOffset); } //如果插入位置为最后,则不插入 - if(offset == dateFormat.toPattern().length()){ + if (offset == dateFormat.toPattern().length()) { return; } //取得显示的时间,处理后得到要显示的字符串 @@ -114,7 +118,7 @@ public class JDateDocument extends PlainDocument{ toTest.substring(newOffset + 1); //如果要显示的字符串合法,则显示,否则给出提示并退出 boolean isValid = isValidDate(toTest); - if(!isValid){ + if (!isValid) { Toolkit.getDefaultToolkit().beep(); return; } @@ -123,9 +127,9 @@ public class JDateDocument extends PlainDocument{ super.insertString(newOffset, s, attributeSet); } //如果插入长度10 - else if(s.length() == 10 || s.length() == 19){ + else if (s.length() == 10 || s.length() == 19) { //合法则显示,否则给出提示退出 - if(!isValidDate(s)){ + if (!isValidDate(s)) { Toolkit.getDefaultToolkit().beep(); return; } @@ -143,10 +147,10 @@ public class JDateDocument extends PlainDocument{ ** 返回值:无 ** 调用者:insertString(int, String,AttributeSet) ***********************************************************************************/ - public void remove(int offset, int length) throws BadLocationException{ + public void remove(int offset, int length) throws BadLocationException { //如果插入位置在"-"前,则回退一个光标位置 //yyyy-MM-dd HH:mm:ss - if(offset == 4 || offset == 7 || + if (offset == 4 || offset == 7 || offset == 10 || offset == 13 || offset == 16) textComponent.setCaretPosition(offset - 1); @@ -163,32 +167,32 @@ public class JDateDocument extends PlainDocument{ ** 返回值:boolean型,真,表示是合法的,假,表示不合法 ** 调用者:insertString(int, String,AttributeSet) ***********************************************************************************/ - private boolean isValidDate(String strDate){ + private boolean isValidDate(String strDate) { int intY, intM, intD; //年,月,日,时,分,秒的值 int intH = 0, intMi = 0, intS = 0; int iCaretPosition; //光标位置 int iPatternLen = getDateFormat().toPattern().length(); //获取字符串 - if(strDate == null){ + if (strDate == null) { return false; } strDate = strDate.trim(); //如果为空,长度不对,则为非法,返回false - if(strDate.length() != iPatternLen){ + if (strDate.length() != iPatternLen) { return false; } //如果是全角字符,则返回false - for(int i = 0; i < 10; i++){ - if(((int)strDate.charAt(i)) > 255){ + for (int i = 0; i < 10; i++) { + if (((int) strDate.charAt(i)) > 255) { return false; } } //取年,月,日的值 - try{ + try { intY = Integer.parseInt(strDate.substring(0, 4)); intM = Integer.parseInt(strDate.substring(5, 7)); intD = Integer.parseInt(strDate.substring(8, 10)); - } catch(Exception e){ + } catch (Exception e) { //失败则返回false return false; } @@ -197,23 +201,23 @@ public class JDateDocument extends PlainDocument{ boolean isValid = true; //月越界 - if(intM > 12 || intM < 1){ + if (intM > 12 || intM < 1) { intM = Math.min(12, Math.max(1, intM)); isValid = false; } //根据月份,判断日期输入,如越界,则修改 - if(intD < 1){ + if (intD < 1) { intD = 1; isValid = false; } - switch(intM){ + switch (intM) { case 4: case 6: case 9: case 11: //最大天数为30天 //如果输入大于30,则修改为30 - if(intD > 30){ + if (intD > 30) { intD = 30; isValid = false; } @@ -221,15 +225,15 @@ public class JDateDocument extends PlainDocument{ case 2: //2月份 //区别闰年 - if((intY % 4 == 0 && intY % 100 != 0) || intY % 400 == 0){ + if ((intY % 4 == 0 && intY % 100 != 0) || intY % 400 == 0) { //如果输入大于29,则修改为29 - if(intD > 29){ + if (intD > 29) { intD = 29; isValid = false; } - } else{ + } else { //如果输入大于28,则修改为28 - if(intD > 28){ + if (intD > 28) { intD = 28; isValid = false; } @@ -238,7 +242,7 @@ public class JDateDocument extends PlainDocument{ default: //最大天数为31天 //如果输入大于31,则修改为31 - if(intD > 31){ + if (intD > 31) { intD = 31; isValid = false; } @@ -246,31 +250,31 @@ public class JDateDocument extends PlainDocument{ // System.err.println("out:intY="+intY+",intM="+intM+",intD="+intD); //yyyy-MM-dd HH:mm:ss - if(iPatternLen > 10){ - try{ + if (iPatternLen > 10) { + try { intH = Integer.parseInt(strDate.substring(11, 13)); intMi = Integer.parseInt(strDate.substring(14, 16)); intS = Integer.parseInt(strDate.substring(17)); - } catch(Exception e){ + } catch (Exception e) { return false; } //时越界 - if(intH > 23 || intH < 0){ + if (intH > 23 || intH < 0) { intH = Math.min(23, Math.max(0, intH)); isValid = false; } //分越界 - if(intMi > 59 || intMi < 0){ + if (intMi > 59 || intMi < 0) { intMi = Math.min(59, Math.max(0, intMi)); isValid = false; } //秒越界 - if(intS > 59 || intS < 0){ + if (intS > 59 || intS < 0) { intS = Math.min(59, Math.max(0, intS)); isValid = false; } } - if(!isValid){ + if (!isValid) { textComponent.setText(toDateString(intY, intM, intD, intH, intMi, intS)); textComponent.setCaretPosition(iCaretPosition + 1); @@ -278,11 +282,11 @@ public class JDateDocument extends PlainDocument{ return isValid; } - private String toDateString(int y, int m, int d, int h, int mi, int s){ + private String toDateString(int y, int m, int d, int h, int mi, int s) { m = Math.max(1, Math.min(12, m)); //最大天数为31天 d = Math.max(1, Math.min(31, d)); - switch(m){ + switch (m) { case 4: case 6: case 9: @@ -292,9 +296,9 @@ public class JDateDocument extends PlainDocument{ case 2: //润年 - if((y % 4 == 0 && y % 100 != 0) || y % 400 == 0){ + if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) { d = Math.min(29, d); //最大天数为29天 - } else{ + } else { d = Math.min(28, d); //最大天数为28天 } break; @@ -311,7 +315,7 @@ public class JDateDocument extends PlainDocument{ String strDate; strDate = strY + strPattern.substring(4, 5) + strM + strPattern.substring(7, 8) + strD; - if(strPattern.length() == 19){ + if (strPattern.length() == 19) { strDate += strPattern.substring(10, 11) + rPad0(2, "" + h) + strPattern.substring(13, 14) + rPad0(2, "" + mi) + strPattern.substring(16, 17) @@ -320,8 +324,8 @@ public class JDateDocument extends PlainDocument{ return strDate; } - private String rPad0(int maxLen, String str){ - if(str.length() < maxLen){ + private String rPad0(int maxLen, String str) { + if (str.length() < maxLen) { str = "0" + str; } return str;