forked from fanruan/design
方磊
3 years ago
8 changed files with 113 additions and 112 deletions
@ -0,0 +1,76 @@ |
|||||||
|
package com.fr.design.gui.itextfield; |
||||||
|
|
||||||
|
import javax.swing.text.AttributeSet; |
||||||
|
import javax.swing.text.BadLocationException; |
||||||
|
import javax.swing.text.PlainDocument; |
||||||
|
import java.awt.Toolkit; |
||||||
|
|
||||||
|
public class UIPositiveAndNegativeIntNumberField extends UINumberField { |
||||||
|
private static final long serialVersionUID = 4946379346015964509L; |
||||||
|
|
||||||
|
public void setFieldDocument() { |
||||||
|
setDocument(createNumberDocument()); |
||||||
|
} |
||||||
|
|
||||||
|
public class NumberDocument extends PlainDocument { |
||||||
|
private static final long serialVersionUID = 1024213269275179172L; |
||||||
|
|
||||||
|
public NumberDocument() { |
||||||
|
} |
||||||
|
|
||||||
|
public boolean checkString(int offset, String s, String str) { |
||||||
|
String strNew = str.substring(0, offset) + s + str.substring(offset, getLength()); |
||||||
|
return isMinusSignOnly(strNew) || (isIntNumber(strNew) && isInputIllegalNumber(strNew) && !isOverMaxOrMinValue(strNew)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void insertString(int offset, String s, AttributeSet a) throws BadLocationException { |
||||||
|
String str = getText(0, getLength()); |
||||||
|
if (!checkString(offset, s, str)) { |
||||||
|
Toolkit.getDefaultToolkit().beep(); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
setisContentChanged(true); |
||||||
|
super.insertString(offset, s, a); |
||||||
|
} |
||||||
|
|
||||||
|
private boolean isMinusSignOnly(String s) { |
||||||
|
return s.contains("-") && s.length() == 1; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 输入字符是否是不合法数字 |
||||||
|
* @param s 输入的字符串 |
||||||
|
* @return 是否不合法 |
||||||
|
*/ |
||||||
|
private boolean isInputIllegalNumber(String s) { |
||||||
|
try { |
||||||
|
Integer.parseInt(s); |
||||||
|
} catch (Exception e) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
private boolean isIntNumber(String s) { |
||||||
|
boolean result = true; |
||||||
|
for (int i = 0; i < s.length(); i++) { |
||||||
|
String ch = s.charAt(i) + ""; |
||||||
|
if (!ch.matches("^[0-9\\-]+$")) { |
||||||
|
result = false; |
||||||
|
} |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
private boolean isOverMaxOrMinValue(String s) { |
||||||
|
int value = Integer.parseInt(s); |
||||||
|
return (value < getMinValue() || value > getMaxValue()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public NumberDocument createNumberDocument() { |
||||||
|
return new NumberDocument(); |
||||||
|
} |
||||||
|
} |
@ -1,61 +0,0 @@ |
|||||||
package com.fr.design.gui.itextfield; |
|
||||||
|
|
||||||
|
|
||||||
import javax.swing.text.AttributeSet; |
|
||||||
import javax.swing.text.BadLocationException; |
|
||||||
import javax.swing.text.PlainDocument; |
|
||||||
import java.awt.Toolkit; |
|
||||||
|
|
||||||
/** |
|
||||||
* Created with IntelliJ IDEA. |
|
||||||
* User: Lenovo |
|
||||||
* Date: 13-3-29 |
|
||||||
* Time: 下午12:02 |
|
||||||
* To change this template use File | Settings | File Templates. |
|
||||||
*/ |
|
||||||
public class UIPositiveIntNumberField extends UINumberField { |
|
||||||
public void setFieldDocument() { |
|
||||||
setDocument(createNumberDocument()); |
|
||||||
} |
|
||||||
|
|
||||||
public class NumberDocument extends PlainDocument { |
|
||||||
public NumberDocument() { |
|
||||||
} |
|
||||||
|
|
||||||
public void insertString(int offset, String s, AttributeSet a) throws BadLocationException { |
|
||||||
String str = getText(0, getLength()); |
|
||||||
|
|
||||||
if (!s.matches("^[0-9]+$")) { |
|
||||||
Toolkit.getDefaultToolkit().beep(); |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
String strNew = str.substring(0, offset) + s + str.substring(offset, getLength()); |
|
||||||
|
|
||||||
if (isOverMaxOrMinValue(strNew) && !isContinueInsertWhenOverMaxOrMinValue()) { |
|
||||||
Toolkit.getDefaultToolkit().beep(); |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
setisContentChanged(true); |
|
||||||
super.insertString(offset, s, a); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 是否继续插入输入的字符 - 当超出范围时 |
|
||||||
* |
|
||||||
* @return true : 继续插入输入的字符 |
|
||||||
*/ |
|
||||||
public boolean isContinueInsertWhenOverMaxOrMinValue() { |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
private boolean isOverMaxOrMinValue( String strNew) { |
|
||||||
return (Double.parseDouble(strNew)<getMinValue() || Double.parseDouble(strNew)>getMaxValue()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public NumberDocument createNumberDocument() { |
|
||||||
return new NumberDocument(); |
|
||||||
} |
|
||||||
} |
|
Loading…
Reference in new issue