From 4367e08557c110142303cc81bc24eb48cfa51cb1 Mon Sep 17 00:00:00 2001 From: "John.Ying" Date: Fri, 12 Aug 2022 19:05:11 +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 | 123 +++++++----------- .../com/fr/design/gui/date/UIDatePicker.java | 2 +- 2 files changed, 51 insertions(+), 74 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 4fa06ef7a..008d01853 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,9 +10,8 @@ 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; @@ -36,60 +35,38 @@ public class JDateDocument extends PlainDocument { SimpleDateFormat dateFormat, String initDateTime) throws UnsupportedOperationException { - this(tc, dateFormat, initDateTime, false); - } - - /** - * - * @param tc - * @param dateFormat - * @param initDateTime - * @param initTime 判断是不是要通过insertString设置默认值 - * @throws UnsupportedOperationException - */ - public JDateDocument(JTextComponent tc, - SimpleDateFormat dateFormat, - String initDateTime, - boolean initTime) throws - UnsupportedOperationException { //设置当前日期格式 setDateFormat(dateFormat); //保存操作的文本框 textComponent = tc; - //设置显示为当前日期,同时完成显示的格式化,如果emptyDateTime为true就设时间为空 - if (!initTime) { - try { - insertString(0, initDateTime, null); - } catch (BadLocationException ex) { - throw new UnsupportedOperationException(ex.getMessage()); - } + try { + insertString(0, initDateTime, null); + } 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()); } @@ -104,15 +81,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; @@ -120,14 +97,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; } //取得显示的时间,处理后得到要显示的字符串 @@ -136,7 +113,7 @@ public class JDateDocument extends PlainDocument { toTest.substring(newOffset + 1); //如果要显示的字符串合法,则显示,否则给出提示并退出 boolean isValid = isValidDate(toTest); - if (!isValid) { + if(!isValid){ Toolkit.getDefaultToolkit().beep(); return; } @@ -145,9 +122,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; } @@ -165,10 +142,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); @@ -185,32 +162,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; } @@ -219,23 +196,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; } @@ -243,15 +220,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; } @@ -260,7 +237,7 @@ public class JDateDocument extends PlainDocument { default: //最大天数为31天 //如果输入大于31,则修改为31 - if (intD > 31) { + if(intD > 31){ intD = 31; isValid = false; } @@ -268,31 +245,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); @@ -300,11 +277,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: @@ -314,9 +291,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; @@ -333,7 +310,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) @@ -342,8 +319,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; diff --git a/designer-base/src/main/java/com/fr/design/gui/date/UIDatePicker.java b/designer-base/src/main/java/com/fr/design/gui/date/UIDatePicker.java index 0344960e1..1da26c302 100644 --- a/designer-base/src/main/java/com/fr/design/gui/date/UIDatePicker.java +++ b/designer-base/src/main/java/com/fr/design/gui/date/UIDatePicker.java @@ -92,7 +92,7 @@ public class UIDatePicker extends UIComboBox implements Serializable { //设置编辑器属性(只能输入正确日期) JTextField textField = ((JTextField) getEditor().getEditorComponent()); if (feedbackToolboxDialog != null) { - dateDocument = new JDateDocument(textField, this.dateFormat, StringUtils.EMPTY, false); + dateDocument = new JDateDocument(textField, this.dateFormat, StringUtils.EMPTY); this.feedbackToolboxDialog = feedbackToolboxDialog; textField.setHorizontalAlignment(SwingConstants.LEFT); //设置当前选择日期