`
gyabooks
  • 浏览: 22996 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java 文本控件内容录入限制(含源代码说明)(二)

    博客分类:
  • JAVA
阅读更多

 

博采众生本文介绍的源代码内容需要 配合这篇文章的第一篇一起,点击文本控件内容录入限制(含源代码说明)(一)查看,所有的源代码可以在CSDN的下载空间找到,名字为:“ 文本录入限制源代码”,同时也可以留言(Email)我来发送给你,希望你在看过以后,留下建议。

  1. packagenet.csdn.blog.qb2049_xg.tools;
  2. importjava.awt.Toolkit;
  3. importjavax.swing.InputVerifier;
  4. importjavax.swing.JComponent;
  5. importjavax.swing.JOptionPane;
  6. importjavax.swing.text.AttributeSet;
  7. importjavax.swing.text.BadLocationException;
  8. importjavax.swing.text.JTextComponent;
  9. importjavax.swing.text.PlainDocument;
  10. /**
  11. *@authorUlyssesMa
  12. *@date2008-9-10
  13. *参考以下网址SteveCheng‘sBlog:
  14. *http://blog.csdn.net/stevech/archive/2006/04/09/656269.aspx
  15. */
  16. publicclassJTextHelp{
  17. //功能控件
  18. privateJTextComponentjtc;
  19. //实现各个功能常量的定义
  20. publicstaticfinalintNUMBER=1;
  21. publicstaticfinalintSTRICT_NUMBER=2;
  22. publicstaticfinalintLOWERCASE=3;
  23. publicstaticfinalintUPPERCASE=4;
  24. publicstaticfinalintIPv4CHECK=5;
  25. publicstaticfinalintMAX_MIN=6;
  26. //全局功能变量
  27. publicinttask=0;
  28. publicintmax=0;
  29. publicintmin=0;
  30. //信息提示的全局变量
  31. publicStringmessage=null;
  32. //是否需要提示信息的设定,默认值为:false(不需要)
  33. privatebooleanneedMessage=false;
  34. //构造函数1,实现是否需要提示信息
  35. publicJTextHelp (JTextComponentjtc,inttask,booleanneedMessage){
  36. if(task! =NUMBER&&task!=LOWERCASE&
  37. &nbs p;task!=UPPERCASE&&task!=IPv4CHECK&&task!=STRICT_NUMBER&&task!=MAX_MIN) {
  38. &nbs p;thrownewIllegalArgumentException("JTextHelp的任务只能 是:"+
  39. &nbs p;"NUMBER, STRICT_NUMBER,IPv4CHECK,LOWERCASE,MAX_MIN或是UPPERCASE");
  40. }
  41. this.jtc=jtc;
  42. this.task=task;
  43. this.needMessage=needMessage;
  44. }
  45. //构造函数2,实现不需要提示信息
  46. publicJTextHelp (JTextComponentjtc,inttask){
  47. if (task!=NUMBER&&task!=LOWERCASE&
  48. &nbs p;task!=UPPERCASE&&task!=IPv4CHECK&&task!=STRICT_NUMBER&&task!=MAX_MIN){
  49. &nbs p;thrownewIllegalArgumentException("JTextHelp的任务只能 是:"+
  50. &nbs p;"NUMBER, STRICT_NUMBER,IPv4CHECK,LOWERCASE,MAX_MIN或是UPPERCASE");
  51. }
  52. this.jtc=jtc;
  53. this.task=task;
  54. }
  55. //构造函数3,实现是否需要提示信息,数字范围限 制
  56. publicJTextHelp (JTextComponentjtc,inttask,booleanneedMessage,intmin,intmax){
  57. if (task!=NUMBER&&task!=LOWERCASE&
  58. &nbs p;task!=UPPERCASE&&task!=IPv4CHECK&&task!=STRICT_NUMBER&&task!=MAX_MIN){
  59. &nbs p;thrownewIllegalArgumentException("JTextHelp的任务只能 是:"+
  60. &nbs p;"NUMBER, STRICT_NUMBER,IPv4CHECK,LOWERCASE,MAX_MIN或是UPPERCASE");
  61. }
  62. this.jtc=jtc;
  63. this.task=task;
  64. this.needMessage=needMessage;
  65. this.min=min;
  66. this.max=max;
  67. }
  68. //构造函数4,实现不需要提示信息,数字范围限制
  69. publicJTextHelp (JTextComponentjtc,inttask,intmin,intmax){
  70. if(task! =NUMBER&&task!=LOWERCASE&
  71. &nbs p;task!=UPPERCASE&&task!=IPv4CHECK&&task!=STRICT_NUMBER&&task!=MAX_MIN) {
  72. &nbs p;thrownewIllegalArgumentException("JTextHelp的任务只能 是:"+
  73. &nbs p;"NUMBER, STRICT_NUMBER,IPv4CHECK,LOWERCASE,MAX_MIN或是UPPERCASE");
  74. }
  75. this.jtc=jtc;
  76. this.task=task;
  77. this.min=min;
  78. this.max=max;
  79. }
  80. //构造函数5,无参可以调用处理方法
  81. publicJTextHelp(){}
  82. //进行数据任务输入的检查
  83. publicvoidinsertCheck(){
  84. switch (task){
  85. caseNUMBER:{
  86. jtc. setDocument(newJNumber());
  87. };break;
  88. caseSTRICT_NUMBER:{
  89. jtc.setDoc ument(newJStrictNumber());
  90. };break;
  91. caseUPPERCASE:{
  92. jtc. setDocument(newLetterCaseConvert (LetterCaseConvert.UPCASE));
  93. };break;
  94. caseLOWERCASE:{
  95. jtc.setDoc ument(newLetterCaseConvert(LetterCaseConvert.LOWERCASE));
  96. };break;
  97. caseIPv4CHECK:{
  98. jtc. setInputVerifier(newMyInputVerifier(JTextHelp.IPv4CHECK));
  99. };break;
  100. caseMAX_MIN:{
  101. jtc.setInp utVerifier(newMyInputVerifier(JTextHelp.MAX_MIN,min,max));
  102. };break;
  103. }
  104. }
  105. //严格数字输入不含的小数点和负号
  106. classJStrictNumberextendsPlainDocument{
  107. //序列化标识符的设定
  108. privatestaticfinallongserialVersionUID=2049L;
  109. /*
  110. *offs:代表了起始位置
  111. *str:代表插入字符串
  112. *a:插入内容的属性
  113. */
  114. //@exceptionBadLoactionException
  115. publicvoidinsertString(intoffs,Stringstr,AttributeSeta)throwsBadLocationException{
  116. charsource[]=str.toCharArray();
  117. charresult[]=newchar[source.length];
  118. message="错误的录入,系统仅接受数字的录入,请检查你的输入!";
  119. intj=0;
  120. for(inti=0;i<source.length;i++){
  121. &nbs p;if(Character.isDigit(source[i])){
  122. &nbs p;result[j++]=source[i];
  123. &nbs p;}else{
  124. &nbs p;if(needMessage){
  125. &nbs p;JOptionPane.showMessageDialog(null,message,
  126. &nbs p;"信息提示",JOptionPane.ERROR_MESSAGE);
  127. &nbs p;}else
  128. &nbs p;{
  129. &nbs p;Toolkit.getDefaultToolkit().beep();
  130. &nbs p;}
  131. &nbs p;return;
  132. }
  133. }
  134. super.insertString(offs,newString (result,0,j),a);
  135. }
  136. }
  137. //普通的数字输入,含有小数和负号,负号必须放在 第一位,小数点的个数只能是一个
  138. classJNumberextendsPlainDocument{
  139. //序列化标识符的设定
  140. privatestaticfinallongserialVersionUID=2049L;
  141. //插入方法的重写
  142. publicvoidinsertString(intoffs,Stringstr,AttributeSeta)throwsBadLocationException{
  143. charsource[]=str.toCharArray();
  144. charresult[]=newchar[source.length];
  145. intj=0;
  146. for(inti=0;i<source.length;i++){
  147. if((source[i]=='-') &&jtc.getCaretPosition()==0&&countMinus(jtc.getText()) ==0){
  148. &nbs p;result[j++]=source[i];
  149. } elseif(Character.isDigit (source[i])){
  150. &nbs p;result[j]=source[i];
  151. &nbs p;j++;
  152. } elseif(source[i]=='.'&&countDot(jtc.getText())==0) {
  153. &nbs p;result[j++]=source[i];
  154. } else{
  155. &nbs p;if(needMessage){
  156. &nbs p;JOptionPane.showMessageDialog(null,"错误的录入,系统仅接受数字(含小数和负数)的录 入,"+
  157. &nbs p;"请检查你的输入!","信息提 示",JOptionPane.ERROR_MESSAGE);
  158. &nbs p;}else{
  159. &nbs p;Toolkit.getDefaultToolkit().beep();
  160. &nbs p;}
  161. &nbs p;return;
  162. }
  163. }
  164. super.insertString(offs,newString (result,0,j),a);
  165. }
  166. }
  167. //大小写输入的转换
  168. classLetterCaseConvertextendsPlainDocument{
  169. //设定大写或是小写
  170. privatestaticfinalintUPCASE=1;
  171. privatestaticfinalintLOWERCASE=2;
  172. //序列化标识符的设定
  173. privatestaticfinallongserialVersionUID=2049L;
  174. //设定功能变量
  175. privateintchan=0;
  176. publicLetterCaseConvert(intchan) {
  177. this.chan=chan;
  178. }
  179. //插入方法的重写
  180. publicvoidinsertString(intoffs,Stringstr,AttributeSeta)throwsBadLocationException{
  181. Stringresult=null;
  182. if(chan==LetterCaseConvert.UPCASE){
  183. result=str .toUpperCase();
  184. super.insertString(offs,result,a);
  185. }elseif(chan==LetterCaseConvert.LOWERCASE) {
  186. resu lt=str.toLowerCase();
  187. <sp an class="keyword">super<span>.insertString(offs,result,a);</span></sp>
  188. }
  189. }
  190. }
  191. /*
  192. *实现文本输入后的检查,输入整数的范围检查,输入 IP地址正确性检查
  193. */
  194. classMyInputVerifierextendsInputVerifier{
  195. privateJTextComponentjc;
  196. privatefloattask=0;
  197. privatefloatmin,max;
  198. publicMyInputVerifier(inttask) {
  199. this.task=task;
  200. }
  201. publicMyInputVerifier(inttask,floatmin,floatmax){
  202. this.task=task;
  203. this.max=max;
  204. this.min=min;
  205. }
  206. publicbooleanverify (JComponentarg0){
  207. booleanrValue=false;
  208. jc=(JTextComponent) arg0;
  209. if(jc.getText().equals(""))
  210. returntrue;
  211. if(task==JTextHelp.IPv4CHECK){
  212. rVal ue=checkIP(jc.getText());
  213. <sp an class="keyword">if<span>(!rValue){</span></sp>
  214. &nbs p;JOptionPane.showMessageDialog(null,"输入的IP地址不合法,请检查你的输入!","信息提 示",JOptionPane.ERROR_MESSAGE);
  215. &nbs p;returnfalse;
  216. }
  217. }
  218. if(task==JTextHelp.MAX_MIN){
  219. <sp an class="keyword">try<span>{</span></sp>
  220. &nbs p;intvalue=Integer.parseInt(jc.getText ());
  221. &nbs p;if(value>=min&&value<=max)
  222. &nbs p;rValue=true;
  223. &nbs p;else{
  224. &nbs p;JOptionPane.showMessageDialog(null,"此处数据被限制在"+String.valueOf (this.min)+
  225. &nbs p; "-"+String.valueOf(this.max) +"之间(含这两个数),请检查输入!","信息提 示",JOptionPane.ERROR_MESSAGE);
  226. &nbs p;rValue=false;
  227. &nbs p;}
  228. } catch(NumberFormatExceptione){
  229. &nbs p;JOptionPane.showMessageDialog(null," 错误的录入,请检查你的输入!"+e.getMessage(),"信息提 示",JOptionPane.ERROR_MESSAGE);
  230. &nbs p;rValue=false;
  231. }
  232. }
  233. returnrValue;
  234. }
  235. }
  236. //计算字符串中小数点的个数
  237. publicintcountDot(Stringstr){
  238. intcount=0;
  239. charstrChar[]=str.toCharArray();
  240. for(inti=0;i<strChar.length;i++)
  241. if(strChar[i]=='.'){
  242. count++; SPAN>
  243. }
  244. returncount;
  245. }
  246. //计算字符串中负号"-"的个数
  247. publicintcountMinus(Stringstr){
  248. intcount=0;
  249. charstrChar[]=str.toCharArray();
  250. for(inti=0;i<strChar.length;i++)
  251. if(strChar[i]=='-'){
  252. count++; SPAN>
  253. }
  254. returncount;
  255. }
  256. //检查IP地址是否合法
  257. publicbooleancheckIP(Stringstr){
  258. intdot[] =newint[4];
  259. Stringtmp1,tmp2,tmp3,tmp4;
  260. /*初步判断是否为合法的IP字符串
  261. *开始和结束不能 是".";
  262. *字符串中的'.'数量是3 个;
  263. *字符串中的字符串长度 必须小于16;
  264. */
  265. if (str.startsWith("."))
  266. returnfalse;
  267. if (str.lastIndexOf(".")==(str.length()-1))
  268. returnfalse;
  269. if (str.length()>15)
  270. returnfalse;
  271. if (countDot(str)!=3)
  272. returnfalse;
  273. /*
  274. *字符的截取,然后进行正整数判断
  275. */
  276. for(inti=0;i<3;i++){
  277. dot[i+1]=str.indexOf(".",dot[i]+1);
  278. }
  279. tmp1=str.substring(dot[0],dot[1]);
  280. tmp2=str.substring(dot[1]+1,dot[2]);
  281. tmp3=str.substring(dot[2]+1,dot[3]);
  282. tmp4=str.substring(dot[3]+1,str.length());
  283. try {
  284. inta1=Integer.parseInt(tmp1);
  285. inta2=Integer.parseInt(tmp2);
  286. inta3=Integer.parseInt(tmp3);
  287. inta4=Integer.parseInt(tmp4);
  288. if(a1<0||a1>255||a2<0||a2>255||a3<0||a3>255||a4<0||a4>255)
  289. returnfalse;
  290. returntrue;
  291. }catch (NumberFormatExceptionnfe){
  292. returnfalse;
  293. }
  294. }
  295. }

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics