JTextField输入条件限定

首先,新的一年祝大家万事如意,合家欢乐。其次,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,转载请注明来源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值