文本控件内容录入限制(含源代码说明)(一)
http://p.blog.csdn.net/images/p_blog_csdn_net/QB2049_XG/EntryImages/20080917/java.gif在程序的开发过程中,经常用到对文本框录入内容的检验,实际上我们让实现简单一些,通过一个统一的限制,例如只能输入0-9数字,或是含有小数点和负号的数学数值等等。本文向你展示,通过Java的文本类型的父类JTextComponent中控制文本编辑(setDocument)和输入检查(setInputVerifier)的API实现输入限制。请注意,所有的实现没有通过事件机制。
整个例子通过两部分介绍,先是介绍程序的例子,而后再介绍如何的实现。
在本例子中仅使用了文本框(JTextField),文本域(JTextArea)与此类似。文中的对话框在使用的时候可以设定为不出现,代之以系统声音,如Windows中“当当”的声音。
http://p.blog.csdn.net/images/p_blog_csdn_net/QB2049_XG/EntryImages/20080926/1.JPG
图一,程序总界面
http://p.blog.csdn.net/images/p_blog_csdn_net/QB2049_XG/EntryImages/20080926/5.JPG
图二,实现对IP地址录入的检查
如果录入错误格式的IP地址,将会弹出该对话框,同时光标不允许离开,除非把刚才的录入内容清除为空,思想就是,通过“.”的数量和位置确定,截取字段,判断范围。
http://p.blog.csdn.net/images/p_blog_csdn_net/QB2049_XG/EntryImages/20080926/4.JPG
图三,实现录入大写或是小写的设定
这个功能的实现主要就是通过setDocument()API进行的。Document类控制着文本框内容的编辑,通过对插入字符的提前处理(使用String类中大小写的转换),把处理过得内容传递给文本框。
http://p.blog.csdn.net/images/p_blog_csdn_net/QB2049_XG/EntryImages/20080926/3.JPG
图四,数学数值的录入检查
也是通过setDocument()API进行提前处理和判断,原理同图三的解释说明。
http://p.blog.csdn.net/images/p_blog_csdn_net/QB2049_XG/EntryImages/20080926/2.JPG
图五,0-9数字录入的限制
http://p.blog.csdn.net/images/p_blog_csdn_net/QB2049_XG/EntryImages/20080926/7.JPG
图六,数值录入范围的限制
注意该方法的实现是把数值(任意型)转换为float类型的,然后在判断我们设定的范围,这个实现也是通过setInputVerifier()API完成。如果录入的为非数值,那么将会有错误的提示信息。
http://p.blog.csdn.net/images/p_blog_csdn_net/QB2049_XG/EntryImages/20080926/6.JPG
图七,数值录入范围的限制
以下为程序代码清单,文中加重颜色部分为是实现检验代码:
<div class="highlighter">
[*]packagenet.csdn.blog.qb2049_xg.exam;
[*]
[*]importjava.awt.Container;
[*]importjava.awt.GridBagConstraints;
[*]importjava.awt.GridBagLayout;
[*]importjavax.swing.JFrame;
[*]importjavax.swing.JLabel;
[*]importjavax.swing.JTextField;
[*]
[*]importnet.csdn.blog.qb2049_xg.tools.JTextHelp;
[*]importnet.csdn.blog.qb2049_xg.tools.MidScr;
[*]
[*]/**
[*]*@authorUlyssesMa
[*]*@date2008-9-24
[*]*/
[*]publicclassJTextHelpExamextendsJFrame{
[*]
[*]/**
[*]* 粗体部分实现了对这种应用实现
[*]*/
[*]privatestaticfinallongserialVersionUID=2049L;
[*]
[*]//构造函数
[*]publicJTextHelpExam(){
[*]this.setTitle("测试文本框的特殊需求");
[*]this.setSize(450,300);
[*]MidScrms=newMidScr(this);
[*]this.setLocation(ms.getX(),ms.getY());
[*]
[*]Containerc=this.getContentPane();
[*]GridBagLayoutgb=newGridBagLayout();
[*]GridBagConstraintscon=newGridBagConstraints();
[*]c.setLayout(gb);
[*]
[*]//UI设定
[*]con.fill=GridBagConstraints.NONE;
[*]con.gridx=0;
[*]con.gridwidth=2;
[*]con.gridy=0;
[*]con.gridheight=2;
[*]JLabeltitle_l=newJLabel("<html><h1>测试文本框的特殊需求</h1></html>");
[*]c.add(title_l,con);
[*]con.gridy=2;
[*]con.gridheight=1;
[*]con.gridwidth=1;
[*]JLabelstr_number_l=newJLabel("仅能接受9个阿拉伯数字");
[*]c.add(str_number_l,con);
[*]JTextFieldstr_number_t=newJTextField(15);
[*]newJTextHelp(str_number_t,JTextHelp.STRICT_NUMBER,true).insertCheck();
[*]str_number_t.setToolTipText("有对话框提示!");
[*]con.gridx=1;
[*]c.add(str_number_t,con);
[*]
[*]con.gridx=<spa n="" class="number">0<span>;</span></spa>
[*]con.gridy=3;
[*]JLabelnumber_l=newJLabel("仅能接受含有小数点和负号的录入");
[*]c.add(number_l,con);
[*]JTextFieldnumber_t=newJTextField(15);
[*]newJTextHelp(number_t,JTextHelp.NUMBER,true).insertCheck();
[*]number_t.setToolTipText("有对话框提示!");
[*]con.gridx=1;
[*]c.add(number_t,con);
[*]
[*]con.gridy=<spa n="" class="number">4<span>;</span></spa>
[*]con.gridx=0;
[*]JLabelupperCase_l=newJLabel("敲入字母时就只是大写字母");
[*]c.add(upperCase_l,con);
[*]JTextFieldupperCase_t=newJTextField(15);
[*]newJTextHelp(upperCase_t,JTextHelp.UPPERCASE).insertCheck();
[*]con.gridx=1;
[*]c.add(upperCase_t,con);
[*]
[*]con.gridy=5;
[*]con.gridx=0;
[*]JLabellowerCase_l=newJLabel("敲入字母时就只是小写字母");
[*]c.add(lowerCase_l,con);
[*]JTextFieldlowerCase_t=newJTextField(15);
[*]newJTextHelp(lowerCase_t,JTextHelp.LOWERCASE).insertCheck();
[*]con.gridx=1;
[*]c.add(lowerCase_t,con);
[*]
[*]con.gridy=<spa n="" class="number">6<span>;</span></spa>
[*]con.gridx=0;
[*]JLabelip_l=newJLabel("IP地址录入检查");
[*]c.add(ip_l,con);
[*]JTextFieldip_t=newJTextField(15);
[*]newJTextHelp(ip_t,JTextHelp.IPv4CHECK,true).insertCheck();
[*]ip_t.setToolTipText("有对话框提示!");
[*]con.gridx=1;
[*]c.add(ip_t,con);
[*]
[*]con.gridy=<spa n="" class="number">7<span>;</span></spa>
[*]con.gridx=0;
[*]JLabelmax_min_l=newJLabel("数值大小范围的限制");
[*]c.add(max_min_l,con);
[*]JTextFieldmax_min_t=newJTextField(15);
[*]newJTextHelp(max_min_t,JTextHelp.MAX_MIN,true,100,1000).insertCheck();
[*]max_min_t.setToolTipText("有对话框提示,本例子中范围限制在100到1000之间!");
[*]con.gridx=1;
[*]c.add(max_min_t,con);
[*]
[*]this.setVisible(true);
[*]this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
[*]}
[*]/**
[*]*@paramargs
[*]*/
[*]publicstaticvoidmain(String[]args){
[*]//TODOAuto-generatedmethodstub
[*]JFrame.setDefaultLookAndFeelDecorated(true);
[*]newJTextHelpExam();
[*]}
[*]
[*]}
[*]
页:
[1]