某烤白馬問我怎樣在一個Java窗體里面只能輸入數字。這個問題我以前在做Web項目的時候碰到過,是采用的JS監聽鍵盤的方式做的。但是在窗體里面怎么做,還沒有做過。
不知道很簡單,百老師跟谷老師都是好老師。于是找了下。
在CSDN上面看到有人有同樣的問題,點此查看。看了下知道了原來可以采用PlainDocument接口的方式實現,但是我看了下代碼,好像是輸入之后再去做判斷,如果不是漢字就去掉該字符。好像有點不符合需求。另外一個方式是采用監聽器的方式。看了下,參照他的代碼寫了一段自己的代碼。
1
private class NumListener implements KeyListener {
2
public void keyPressed(KeyEvent e) {
3
// TODO Auto-generated method stub
4
5
}
6
7
public void keyReleased(KeyEvent e) {
8
// TODO Auto-generated method stub
9
10
}
11
12
public void keyTyped(KeyEvent e) {
13
14
char code = e.getKeyChar();
15
16
if (isNumber(code)){
17
return;
18
} else {
19
e.consume();
20
}
21
}
22
23
24
}
25
26

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

對比一下CSDN上那位兄弟的回答,我這里少了很多,不知道會不會有什么問題。說實話,我不明白他為什么要判斷輸入框的類型。而判斷是否是數字的代碼我覺得還可以采用正則表達式,也改造了一下。
1
private static Pattern NUM_PATTERN = Pattern.compile("\\d*");
2
protected boolean isNumber(char code) {
3
// if ((code == '0') || (code == '1') || (code == '2')
4
// || (code == '3') || (code == '4') || (code == '5')
5
// || (code == '6') || (code == '7') || (code == '8')
6
// || (code == '9')){
7
// return true;
8
// }
9
Matcher matcher = NUM_PATTERN.matcher(String.valueOf(code));
10
if (matcher.matches()){
11
return true;
12
}
13
14
return false;
15
}
16
17

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

代碼還是需要完善,還有對于復制粘貼沒有處理。