在程序 的开发过程中,经常用到对文本框录入内容的检验,实际上我们让实现简单一些,通过一个统一的限制,例如只能输入0-9数字,或是含有小数点和负号的数学数值等等。

本文向你展示,通过Java的文本类型的父类JTextComponent中控制文本编辑(setDocument)和输入检查(setInputVerifier)的API实现输 入限制。请注意,所有的实现没有通过事件机制。

整个例子通过两部分介绍,先是介绍程序的例子,而后再介绍如何的实现。

在本例子中仅使用了文本框(JTextField),文本域(JTextArea)与此类似。文中的对话框在使用的时候可以设定为不出现,代之以系统 声音,如Windows中“当当”的声音。


Javav 限制数字大小范围 java限制输入数字范围_C#

图一,程序总界面


Javav 限制数字大小范围 java限制输入数字范围_C_02

图二,实现对IP地址录入的检查

如果录入错误格式的IP地址,将会弹出该对话框,同时光标不允许离开,除非把刚才的录入内容清除为空,思想就是,通过“.”的数量 和位置确定,截取字段,判断范围。


Javav 限制数字大小范围 java限制输入数字范围_C#_03

图三,实现录入大写或是小写的设定

这个功能的实现主要就是通过setDocument()API进行的。Document类控制着文本框内容的编辑,通过对插入字符的提前处理(使用 String类中大小写的转换),把处理过得内容传递给文本框。


Javav 限制数字大小范围 java限制输入数字范围_C#_04

图四,数学数值的录入检查

也是通过setDocument()API进行提前处理和判断,原理同图三的解释说明。


Javav 限制数字大小范围 java限制输入数字范围_Swing_05

图五,0-9数字录入的限制


Javav 限制数字大小范围 java限制输入数字范围_C_06

图六,数值录入范围的限制

注意该方法的实现是把数值(任意型)转换为float类型的,然后在判断我们设定的范围,这个实现也是通过setInputVerifier()API 完成。如果录入的为非数值,那么将会有错误的提示信息。


Javav 限制数字大小范围 java限制输入数字范围_Javav 限制数字大小范围_07

图七,数值录入范围的限制

以下为程序代码清单,文中加重颜色部分为是实现检验代码:


    1. packagenet.csdn.blog.qb2049_xg.exam; 
    2. 
    3. importjava.awt.Container; 
    4. importjava.awt.GridBagConstraints; 
    5. importjava.awt.GridBagLayout; 
    6. importjavax.swing.JFrame; 
    7. importjavax.swing.JLabel; 
    8. importjavax.swing.JTextField; 
    9. 
    10. importnet.csdn.blog.qb2049_xg.tools.JTextHelp; 
    11. importnet.csdn.blog.qb2049_xg.tools.MidScr; 
    12. 
    13. /**
    14. *@authorUlyssesMa
    15. *@date2008-9-24
    16. */
    17. publicclassJTextHelpExamextendsJFrame{ 
    18. 
    19. /**
    20. * 粗体部分实现了对这种应用实现
    21. */
    22. privatestaticfinallongserialVersionUID=2049L; 
    23. 
    24. //构造函数
    25. publicJTextHelpExam(){ 
    26. this.setTitle("测试文本框的特殊需 求"); 
    27. this.setSize(450,300); 
    28. newMidScr(this); 
    29. this.setLocation(ms.getX(),ms.getY()); 
    30. 
    31. Containerc=this.getContentPane();
    32. newGridBagLayout (); 
    33. newGridBagConstraints(); 
    34. c.setLayout (gb);
    35. 
    36. //UI设定 
    37. con.fill=GridBagConstraints.NONE;
    38. 0; 
    39. 2; 
    40. 0; 
    41. 2; 
    42. newJLabel("<html><h1>测试文本框的特殊需求 </h1></html>"); 
    43. c.add(title_l,con);
    44. 2; 
    45. 1; 
    46. 1; 
    47. newJLabel("仅能接受9个阿拉伯数字"); 
    48. c.add (str_number_l,con);
    49. newJTextField(15); 
    50. newJTextHelp (str_number_t,JTextHelp.STRICT_NUMBER,true).insertCheck ();
    51. "有对话框提 示!"); 
    52. 1; 
    53. c.add(str_number_t,con);
    54. 
    55.  con.gridx=<spa n="" >0<span>;</span></spa>
    56. 3; 
    57. newJLabel("仅能接受含有小数点和负号的录入"); 
    58. c.add (number_l,con);
    59. newJTextField(15); 
    60. newJTextHelp (number_t,JTextHelp.NUMBER,true).insertCheck ();
    61. "有对话框提 示!"); 
    62. 1; 
    63. c.add(number_t,con);
    64. 
    65.  con.gridy=<spa n="" >4<span>;</span></spa>
    66. 0; 
    67. newJLabel("敲入字母时就只是大写字母"); 
    68. c.add (upperCase_l,con);
    69. newJTextField(15); 
    70. newJTextHelp (upperCase_t,JTextHelp.UPPERCASE).insertCheck();
    71. 1; 
    72. c.add (upperCase_t,con);
    73. 
    74. 5; 
    75. 0; 
    76. newJLabel("敲入字母时就只是小写字 母"); 
    77. c.add(lowerCase_l,con);
    78. newJTextField (15); 
    79. newJTextHelp(lowerCase_t,JTextHelp.LOWERCASE).insertCheck();
    80. 1; 
    81. c.add(lowerCase_t,con);
    82. 
    83.  con.gridy=<spa n="" >6<span>;</span></spa>
    84. 0; 
    85. newJLabel("IP地址录入检查"); 
    86. c.add (ip_l,con);
    87. newJTextField(15); 
    88. newJTextHelp (ip_t,JTextHelp.IPv4CHECK,true).insertCheck ();
    89. "有对话框提 示!"); 
    90. 1; 
    91. c.add(ip_t,con);
    92. 
    93.  con.gridy=<spa n="" >7<span>;</span></spa>
    94. 0; 
    95. newJLabel("数值大小范围的限制"); 
    96. c.add (max_min_l,con);
    97. newJTextField(15); 
    98. newJTextHelp (max_min_t,JTextHelp.MAX_MIN,true,100,1000).insertCheck();
    99. "有对话框提示,本例子中范围限制在100到1000之间!"); 
    100. 1; 
    101. c.add(max_min_t,con);
    102. 
    103. this.setVisible(true); 
    104. this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
    105. }
    106. /**
    107. *@paramargs
    108. */
    109. publicstaticvoidmain (String[]args){ 
    110. //TODOAuto- generatedmethodstub
    111. true); 
    112. newJTextHelpExam(); 
    113. }
    114. 
    115. }
    116.

    本例中引用了两个自己写的工具类,其中MidScr是实现窗体居中显示

    alimama_pid="mm_11642003_1480608_3725409"; alimama_titlecolor="0000FF"; alimama_descolor ="000000"; alimama_bgcolor="FFFFFF"; alimama_bordercolor="E6E6E6"; alimama_linkcolor="008000"; alimama_bottomcolor="FFFFFF"; alimama_anglesize="0"; alimama_bgpic="0"; alimama_icon="0"; alimama_sizecode="11"; alimama_width=760; alimama_height=90; alimama_type=2;