是否有任何方法只接受JTextField中的数值?是否有任何方法只接受JTextField?有什么特别的方法吗?
3 回答

森林海
TA贡献2011条经验 获得超2个赞
import javax.swing.*;import javax.swing.text.*;public class JNumberTextField extends JTextField{ private static final char DOT = '.'; private static final char NEGATIVE = '-'; private static final String BLANK = ""; private static final int DEF_PRECISION = 2; public static final int NUMERIC = 2; public static final int DECIMAL = 3; public static final String FM_NUMERIC = "0123456789"; public static final String FM_DECIMAL = FM_NUMERIC + DOT; private int maxLength = 0; private int format = NUMERIC; private String negativeChars = BLANK; private String allowedChars = null; private boolean allowNegative = false; private int precision = 0; protected PlainDocument numberFieldFilter; public JNumberTextField() { this( 10, NUMERIC ); } public JNumberTextField( int maxLen ) { this( maxLen, NUMERIC ); } public JNumberTextField( int maxLen, int format ) { setAllowNegative( true ); setMaxLength( maxLen ); setFormat( format ); numberFieldFilter = new JNumberFieldFilter(); super.setDocument( numberFieldFilter ); } public void setMaxLength( int maxLen ) { if (maxLen > 0) maxLength = maxLen; else maxLength = 0; } public int getMaxLength() { return maxLength; } public void setPrecision( int precision ) { if ( format == NUMERIC ) return; if ( precision >= 0 ) this.precision = precision; else this.precision = DEF_PRECISION; } public int getPrecision() { return precision; } public Number getNumber() { Number number = null; if ( format == NUMERIC ) number = new Integer(getText()); else number = new Double(getText()); return number; } public void setNumber( Number value ) { setText(String.valueOf(value)); } public int getInt() { return Integer.parseInt( getText() ); } public void setInt( int value ) { setText( String.valueOf( value ) ); } public float getFloat() { return ( new Float( getText() ) ).floatValue(); } public void setFloat(float value) { setText( String.valueOf( value ) ); } public double getDouble() { return ( new Double( getText() ) ).doubleValue(); } public void setDouble(double value) { setText( String.valueOf(value) ); } public int getFormat() { return format; } public void setFormat(int format) { switch ( format ) { case NUMERIC: default: this.format = NUMERIC; this.precision = 0; this.allowedChars = FM_NUMERIC; break; case DECIMAL: this.format = DECIMAL; this.precision = DEF_PRECISION; this.allowedChars = FM_DECIMAL; break; } } public void setAllowNegative( boolean value ) { allowNegative = value; if ( value ) negativeChars = "" + NEGATIVE; else negativeChars = BLANK; } public boolean isAllowNegative() { return allowNegative; } public void setDocument( Document document ) { } class JNumberFieldFilter extends PlainDocument { public JNumberFieldFilter() { super(); } public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException { String text = getText(0,offset) + str + getText(offset,(getLength() - offset)); if ( str == null || text == null ) return; for ( int i=0; i<str.length(); i++ ) { if ( ( allowedChars + negativeChars ).indexOf( str.charAt(i) ) == -1) return; } int precisionLength = 0, dotLength = 0, minusLength = 0; int textLength = text.length(); try { if ( format == NUMERIC ) { if ( ! ( ( text.equals( negativeChars ) ) && ( text.length() == 1) ) ) new Long(text); } else if ( format == DECIMAL ) { if ( ! ( ( text.equals( negativeChars ) ) && ( text.length() == 1) ) ) new Double(text); int dotIndex = text.indexOf(DOT); if( dotIndex != -1 ) { dotLength = 1; precisionLength = textLength - dotIndex - dotLength; if( precisionLength > precision ) return; } } } catch(Exception ex) { return; } if ( text.startsWith( "" + NEGATIVE ) ) { if ( !allowNegative ) return; else minusLength = 1; } if ( maxLength < ( textLength - dotLength - precisionLength - minusLength ) ) return; super.insertString( offset, str, attr ); } }}
添加回答
举报
0/150
提交
取消