首先,新的一年祝大家万事如意,合家欢乐。其次,2014年的第一篇博客,也给自己送上一份祝福,祝新的一年,旗开得胜,再创佳绩。
Ok,进入正题。
年前的一个Swing项目,后来觉得自己JTextField内容限定做的不好,查看了几种思路。一种是通过键盘事件解决,另一种通过setDocument解决。第二种看了下API,也没太明白,后来用第一种解决了。今天就共享一下我的Demo,如果有什么Bug,希望大家指出。
案例:JTextField限定只能输入0-120的整数。
首先,我讲下思路。
1.通过设定范围,限制输入键位为0-9.
2.通过校验内容,限定数值范围。比如此案例为3位数,则特殊处理3位数的情况。
具体流程图如下:
下面附上Demo代码,和流程图稍有不同,但思路完全一致。
package pyz.main;
import javax.swing.*;
import java.awt.FlowLayout;
import java.awt.event.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame=new JFrame();
final JTextField tf=new JTextField(15);
tf.addKeyListener(new KeyListener(){
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
int charstr=e.getKeyChar();
//take care the str don't contain this one
String str=tf.getText();
//ignore the first zero
if(str.length()==0) {
if(charstr==KeyEvent.VK_0){
e.consume();
}
}
//control the value between 0 and 9
if(charstr<KeyEvent.VK_0||charstr>KeyEvent.VK_9){
e.consume();
}
//control the value below 120 or eqal 120
if(str.length()>0){
byte[] bt=str.getBytes();
if(str.length()==2){
if(bt[0]>KeyEvent.VK_1){
e.consume();
}else if(bt[1]>KeyEvent.VK_2){
e.consume();
}else if(bt[1]==KeyEvent.VK_2){
if(charstr!=KeyEvent.VK_0){
e.consume();
}
}
}
if(str.length()>2) e.consume();
}
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
});
frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(tf);
frame.setSize(300,200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
如有bug,欢迎来信,邮箱piyongze@126.com,转载请注明来源。