?
??1
import
?java.awt.event.KeyEvent;
??2
import
?java.awt.event.KeyListener;
??3
??4
import
?javax.swing.JTextField;
??5
import
?javax.swing.event.CaretEvent;
??6
import
?javax.swing.event.CaretListener;
??7
import
?javax.swing.text.AttributeSet;
??8
import
?javax.swing.text.BadLocationException;
??9
import
?javax.swing.text.PlainDocument;
?10
?11
public
?
class
?NumberTextFieldDocument?
extends
?PlainDocument?
implements
?KeyListener,?CaretListener
{
?12
????
?13
????
int
?integerLength?
=
?
-
1
;
?14
????
int
?fractionLength?
=
?
-
1
;
?15
????
double
?MaxValue,?MinValue;
?16
????
boolean
?useBound?
=
?
false
;
?17
????String?correctValue?
=
?
""
;
?18
????
private
?
int
?caretposold;
?19
????
private
?
int
?caretpos;
?20
????
?21
????
/**?*/
/**
?22
?????*?
?23
?????*
?24
?????
*/
?25
????
public
?NumberTextFieldDocument()?
{
?26
????????
super
();
?27
????}
?28
????
?29
????
/**?*/
/**
?30
?????*?
?31
?????*?
@param
?maxValue
?32
?????*?
@param
?minValue
?33
?????
*/
?34
????
public
?NumberTextFieldDocument(
double
?maxValue,?
double
?minValue)?
{
?35
????????
super
();
?36
????????setBound(maxValue,?minValue);
?37
????}
?38
????
?39
????
/**?*/
/**
?40
?????*?
?41
?????*?
@param
?integerLength
?42
?????*?
@param
?fractionLength
?43
?????
*/
?44
????
public
?NumberTextFieldDocument(
int
?integerLength,?
int
?fractionLength)?
{
?45
????????
super
();
?46
????????setLength(integerLength,?fractionLength);
?47
????}
?48
????
/**?*/
/**
?49
?????*?
?50
?????*?
@param
?integerLength
?51
?????*?
@param
?fractionLength
?52
?????
*/
?53
????
public
?
void
?setLength(
int
?integerLength,?
int
?fractionLength)?
{
?54
????????
if
?(integerLength?
<
?
1
?
||
?fractionLength?
<
?
0
)?
{
?55
//
????????????Error
?56
????????}
?
else
?
{
?57
????????????
this
.integerLength?
=
?integerLength;
?58
????????????
this
.fractionLength?
=
?fractionLength;
?59
????????}
?60
????}
?61
????
?62
????
/**?*/
/**
?63
?????*?
?64
?????*?
@param
?maxValue
?65
?????*?
@param
?minValue
?66
?????
*/
?67
????
public
?
void
?setBound(
double
?maxValue,?
double
?minValue)?
{
?68
????????
if
?(maxValue?
<
?minValue)?
?69
????????????
return
;
?70
????????MaxValue?
=
?maxValue;
?71
????????MinValue?
=
?minValue;
?72
????????useBound?
=
?
true
;
?73
????}
?74
?75
????
?76
????
public
?
void
?insertString(
int
?offs,?String?str,?AttributeSet?a)?
throws
?BadLocationException?
{
?77
????????
?78
????????String?oldtxt?
=
?getText(
0
,?getLength());
?79
????????String?newtxt?
=
?oldtxt.substring(
0
,?offs)?
+
?str?
+
?oldtxt.substring(offs);
?80
????????
boolean
?strRight?
=
?testString(oldtxt);
?81
????????
boolean
?newtxtRight?
=
?testString(newtxt);
?82
????????
if
?(strRight?
&&
?
!
newtxtRight)
{
?83
????????????
return
;
?84
????????}
?
else
?
if
?(
!
strRight?
&&
?
!
newtxtRight)?
{
?85
????????????
int
?rlen?
=
?correctValue.length();
?86
????????????
int
?flen?
=
?oldtxt.length();
?87
????????????
int
?sublen?
=
?rlen?
-
?flen;
?88
????????????
for
?(
int
?i?
=
?
0
;?i?
<
?flen;?i
++
)?
{
?89
????????????????String?substr?
=
?correctValue.substring(
0
,?i)?
+
?correctValue.substring(i?
+
?sublen);
?90
????????????????
if
?(substr.equals(oldtxt))?
{
?91
????????????????????
super
.insertString(i,?correctValue.substring(i,?i?
+
?sublen),?a);
?92
????????????????????correctValue?
=
?String.copyValueOf(getText(
0
,?getLength()).toCharArray());
?93
????????????????????
return
;
?94
????????????????}
?95
????????????}
?96
????????????
return
;
?97
????????}
?98
????????
?99
????????
super
.insertString(offs,?str,?a);
100
????????correctValue?
=
?String.copyValueOf(getText(
0
,?getLength()).toCharArray());
101
????????
102
????}
103
????
104
????
public
?
void
?caretUpdate(CaretEvent?e)?
{
105
????????caretposold?
=
?caretpos;
106
????????caretpos?
=
?e.getDot();
107
//
????????System.out.print("?"?+?caretpos);
108
????}
109
????
110
????
public
?
void
?keyTyped(KeyEvent?e)?
{
111
????????
112
????}
113
114
????
public
?
void
?keyPressed(KeyEvent?e)?
{
115
????????
if
?(e.getKeyCode()?
==
?KeyEvent.VK_BACK_SPACE?
||
?e.getKeyCode()?
==
?KeyEvent.VK_DELETE)?
{
116
????????????JTextField?field?
=
?(JTextField)?e.getSource();
117
????????????
try
?
{
118
????????????????String?nowtxt?
=
?getText(
0
,?getLength());
119
????????????????String?selecttxt?
=
?field.getSelectedText();
120
????????????????
if
?(correctValue?
==
?
null
?
||
?(selecttxt?
!=
?
null
?
&&
?selecttxt.equals(correctValue)))?
{
121
????????????????????correctValue?
=
?
null
;
122
????????????????????
return
;
123
????????????????}
124
????????????????
if
?(
!
testString(nowtxt))?
{
125
????????????????????
int
?nowpos?
=
?
126
????????????????????caretposold?
-
?caretpos?
==
?correctValue.length()?
-
?nowtxt.length()?
?
?caretposold?:?caretpos;
127
????????????????????remove(
0
,?getLength());
128
????????????????????insertString(
0
,?correctValue,?
null
);
129
????????????????????field.setCaretPosition(nowpos);
130
????????????????}
?
else
?
{
131
????????????????????correctValue?
=
?nowtxt;
132
????????????????}
133
????????????}
?
catch
?(BadLocationException?e1)?
{
134
????????????????System.out.println(e1);
135
????????????}
136
????????}
137
????}
138
139
????
public
?
void
?keyReleased(KeyEvent?e)?
{
140
????????
if
?(getLength()?
==
?
0
)?
{
141
????????????
return
;
142
????????}
143
????????
if
?(e.getKeyCode()?
==
?KeyEvent.VK_BACK_SPACE?
||
?e.getKeyCode()?
==
?KeyEvent.VK_DELETE)?
{
144
????????????JTextField?field?
=
?(JTextField)?e.getSource();
145
????????????
try
?
{
146
????????????????String?nowtxt?
=
?getText(
0
,?getLength());
147
????????????????String?selecttxt?
=
?field.getSelectedText();
148
????????????????
if
?(correctValue?
==
?
null
?
||
?(selecttxt?
!=
?
null
?
&&
?selecttxt.equals(correctValue)))?
{
149
????????????????????correctValue?
=
?
null
;
150
????????????????????
return
;
151
????????????????}
152
????????????????
if
?(
!
testString(nowtxt))?
{
153
????????????????????
int
?nowpos?
=
?
154
????????????????????caretposold?
-
?caretpos?
==
?correctValue.length()?
-
?nowtxt.length()?
?
?caretposold?:?caretpos;
155
????????????????????remove(
0
,?getLength());
156
????????????????????insertString(
0
,?correctValue,?
null
);
157
????????????????????field.setCaretPosition(nowpos);
158
????????????????}
?
else
?
{
159
????????????????????correctValue?
=
?nowtxt;
160
????????????????}
161
????????????}
?
catch
?(BadLocationException?e1)?
{
162
????????????????System.out.println(e1);
163
????????????}
164
????????}
165
????}
166
????
167
????
private
?
boolean
?testString(String?waitfortest)?
{
168
????????
int
?dotindex?
=
?waitfortest.indexOf(
"
.
"
);
169
????????
int
?strLength?
=
?waitfortest.length();
170
????????
if
?(integerLength?
!=
?
-
1
?
&&
?fractionLength?
!=
?
-
1
)?
{
171
????????????
if
?(fractionLength?
==
?
0
?
&&
?dotindex?
>=
?
0
)?
{
172
????????????????
return
?
false
;
173
????????????}
174
????????????
if
?(dotindex?
>
?
0
?
&&
?dotindex?
!=
?strLength?
-
?
1
)?
{
175
????????????????String[]?splitstrs?
=
?waitfortest.split(
"
\\.
"
);
176
????????????????
if
?(splitstrs.length?
!=
?
2
)?
{
//
impossible
177
????????????????????
return
?
false
;
178
????????????????}
?
else
?
if
?(splitstrs[
0
].length()?
>
?integerLength?
||
?splitstrs[
1
].length()?
>
?fractionLength)?
{
179
????????????????????
return
?
false
;
180
????????????????}
181
????????????}
?
else
?
if
?((dotindex?
==
?
0
?
&&
?strLength?
>
?fractionLength?
+
?
1
)?
182
????????????????????
||
?(dotindex?
==
?strLength?
-
?
1
?
&&
?strLength?
>
?integerLength?
+
?
1
)
183
????????????????????
||
?(dotindex?
<
?
0
?
&&
?strLength?
>
?integerLength))?
{
184
????????????????
return
?
false
;
185
????????????}
186
????????}
187
188
????????waitfortest?
=
?waitfortest.toLowerCase();
189
????????
if
?(waitfortest.indexOf(
"
?
"
)?
>=
?
0
?
||
?waitfortest.indexOf(
"
d
"
)?
>=
?
0
?
||
?waitfortest.indexOf(
"
f
"
)?
>=
?
0
?)?
{
190
????????????
return
?
false
;
191
????????}
192
????????
try
?
{
193
????????????
if
?(dotindex?
==
?
0
)?
{
194
????????????????waitfortest?
=
?
"
0
"
?
+
?waitfortest;
195
????????????}
196
????????????
double
?num?
=
?Double.parseDouble(waitfortest);
197
????????????
if
?(useBound?
&&
?(num?
>
?MaxValue?
||
?num?
<
?MinValue))?
{
198
????????????????
return
?
false
;
199
????????????}
200
????????}
?
catch
?(Exception?e)?
{
201
????????????
return
?
false
;
202
????????}
203
????????
return
?
true
;
204
????}
205
????
206
}
207
下面是Test ?1 import?javax.swing.*; ?2 ?3 public?class?NumberTextFieldDocumentTest? { ?4 ????public?static?void?main(String[]?args)? { ?5 ????????JFrame?f?=?new?JFrame("TextDocumentTest"); ?6 ????????JPanel?panel?=?new?JPanel(); ?7 ????????f.getContentPane().add(panel); ?8 ????????JTextField?txt?=?new?JTextField(); ?9 ????????txt.setColumns(20); 10 ???????? 11 ????????NumberTextFieldDocument?doc?=?new?NumberTextFieldDocument(); 12 ????????doc.setBound(99999,?0.00001); 13 ????????doc.setLength(5,?5); 14 ????????txt.setDocument(doc); 15 ????????txt.addKeyListener(doc); 16 ????????txt.addCaretListener(doc); 17 ???????? 18 ????????panel.add(txt); 19 ????????f.pack(); 20 ????????f.setVisible(true); 21 ????????f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 22 ????????txt.setText("123.123"); 23 ???????? 24 ????} 25 } 26
|
|
|
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|
28 | 29 | 30 | 31 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
導(dǎo)航
統(tǒng)計(jì)
- 隨筆: 115
- 文章: 1
- 評(píng)論: 86
- 引用: 0
常用鏈接
留言簿(5)
隨筆檔案(115)
網(wǎng)址
搜索
積分與排名
最新評(píng)論

閱讀排行榜
評(píng)論排行榜
|
|