JAVA限制文本框输入

简介:

我们在做JAVA GUI开发的时候,有的时候需要对文本框中的内容进行限制,比如最大长度、转换为大写等。今天就为大家介绍一下该如何实现。

通过查阅JDK API,我们可以知道,在JTextField中提供了setDocument(Document doc)方法,用于将编辑器与一个文本文档关联。那么我们就需要使用它啦。

Document是一个接口,有如下几个实现类:

  • AbstractDocument
  • DefaultStyledDocument
  • HTMLDocument
  • PlainDocument

这里我们需要使用的就是PlainDocumentPlainDocument维护无任何字符属性的普通文档。此文档的默认元素结构是文本中的行的映射。由 getDefaultRootElement 返回的 Element 是行的映射,且每个子元素表示一行。此模型不维护任何字符级属性,但每行都可以用一个任意的属性集来标记。使用默认的根元素可以快速执行从行到偏移量和从偏移量到行的转换。由编辑激发的 DocumentEvent 的结构信息将指示行结构的更改。 默认的内容存储管理是通过间隙缓冲区实现 (GapContent) 执行的。如果编辑是连续的或集群化的(正如常见的那样),此操作支持对大型文档的高效合理编辑。

PlainDocument中提供了insertString(int offs, String str, AttributeSet a),用于向文档中插入某些内容,所以我们只需要重写该方法就可以了。

首先我们先来写一个将输入字符转换为大写的示例:

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class UpperDocument extends PlainDocument
{

   private static final long serialVersionUID = 1L;

   @Override
   public void insertString(int offs, String str, AttributeSet a)
         throws BadLocationException
   {
      if (str == null)
      {
         return;
      }
      char[] upper = str.toCharArray();
      for (int i = 0; i < upper.length; i++)
      {
         upper[i] = Character.toUpperCase(upper[i]);
      }
      super.insertString(offs, new String(upper), a);
   }
}

编写测试方法:

import javax.swing.JFrame;
import javax.swing.JTextField;

public class InputToUpperTest
{
   public static void main(String[] args)
   {
      JTextField textField = new JTextField();
      textField.setDocument(new UpperDocument());
      JFrame frame = new JFrame();
      frame.add(textField);
      frame.setSize(300, 150);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }
}

是不是很简单,接下来我们再来实现一个通过正则校验输入内容的文档:

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class RegexDocument extends PlainDocument
{
   private static final long serialVersionUID = 1L;
   private String regex = null;

   public RegexDocument()
   {
      super();
   }

   public RegexDocument(String regex)
   {
      this();
      this.regex = regex;
   }

   @Override
   public void insertString(int offs, String str, AttributeSet a)
         throws BadLocationException
   {
      if (str == null)
      {
         return;
      }
      if (regex != null)
      {
         if (!new StringBuilder(getText(0, getLength())).insert(offs, str)
               .toString().matches(regex))
         {
            return;
         }
         super.insertString(offs, str, a);
      }
      else
      {
         super.insertString(offs, str, a);
      }
   }
}

继续编写测试方法对其进行测试:

import javax.swing.JFrame;
import javax.swing.JTextField;

public class InputValidTest
{
   public static void main(String[] args)
   {
      JTextField textField = new JTextField();
      textField.setDocument(new RegexDocument("\\d{0,10}"));
      JFrame frame = new JFrame();
      frame.add(textField);
      frame.setSize(300, 150);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }
}

通过上面两个示例,相信大家已经知道了如何限制输入框输入的内容了,在实际应用中,我们可以根据实际情况编写我们自己的PlainDocument

目录
相关文章
|
XML Java Android开发
Android 中通过Java代码动态生成EditText视图,并循环遍历EditText取出遍历的ID和文本框的值
Android 中通过Java代码动态生成EditText视图,并循环遍历EditText取出遍历的ID和文本框的值
140 0
|
Java 程序员
Java 案例练习:编写 Java 程序,输入年份和月份,使用 switch 结构计算对应月份的天数。月份为 1、3、5、7、8、10、12 时,天数为 31 天。月份为 4、6、9、11 时,天数为
Java 案例练习:编写 Java 程序,输入年份和月份,使用 switch 结构计算对应月份的天数。月份为 1、3、5、7、8、10、12 时,天数为 31 天。月份为 4、6、9、11 时,天数为
540 0
Java 案例练习:编写 Java 程序,输入年份和月份,使用 switch 结构计算对应月份的天数。月份为 1、3、5、7、8、10、12 时,天数为 31 天。月份为 4、6、9、11 时,天数为
|
Java
167. 两数之和 II - 输入有序数组(java)
167. 两数之和 II - 输入有序数组(java)
82 0
java Linux语句输入 linux下执行语句
java Linux语句输入 linux下执行语句
|
Java
Java中的数据输入、顺序结构及分支结构之if语句
数据输入、顺序结构及分支结构之if语句的简单示例
136 0
Java中的数据输入、顺序结构及分支结构之if语句
|
Java
Java泛型——限制可用类型
Java泛型——限制可用类型
156 0
|
Java
Java中同时输入字符串和int类型出错的处理方式
在Java中,如果输入int类型和字符串处理不当会产生错误,例如:如果先输入int类型,在输入字符串类型
301 0
|
Java
java 中输入字符的方法(顺便判断元音辅音)
java 中输入字符的方法(顺便判断元音辅音)
130 0
|
Java
java键盘录入技术,完成输入操作
package com.acwing.scanner; import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { //目标:学会使用键盘录入技术 //2、得到一个键盘扫描器对象 Scanner sc = new Scanner(System.in); //3、调用sc对象的功能等待用户接受用户输入的数据 //这个代码会等待用户输入数据,直到用户输入完数据并按了回车键,就把数据
115 0