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

时间: 2025-01-13 05:42:05

JAVA限制文本框输入的相关文章

JAVA中在文本框输入一个字符,下拉菜单中自动检索出现对应的字符怎么实现,急求各位大师了。

问题描述 JAVA中在文本框输入一个字符,下拉菜单中自动检索出现对应的字符怎么实现,急求各位大师了. 如1对应电汇,2对应信用证 当我在本框中输入1,则自动弹出对应下拉菜单:电汇 解决方案 网上一大堆,看你是要动态渲染,还是静态!

jsp问题-怎么在html中实现如下动态表格的生成,随便文本框输入n,就产生n行n列表格

问题描述 怎么在html中实现如下动态表格的生成,随便文本框输入n,就产生n行n列表格 图片是java的.但我想用html和jsp实现. 解决方案 再说ASP输出N行N列表格 解决方案二: 普通的只会tr,td那种呢.哎. 解决方案三: 可以的啊,直接生成就可以了,自己拼一下js,不就ok了? 参考: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"&

IOS开发中取消文本框输入时的小键盘

  这篇文章主要介绍了IOS开发中取消文本框输入时的小键盘,需要的朋友可以参考下 首先在Interface Builder中选择TextFields,然后在Text Field Attributes中找到Text Input Traits,选择Return Key为done.OK 定义方法 - (IBAction) textFieldDoneEditing:(id)sender; //按下Done键关闭键盘 实现方法 代码如下: //按完Done键以后关闭键盘 - (IBAction) text

html禁止文本框输入

 禁止文本框输入的几个常用标签input中有几个属性,分别是readonly.disabled.autocomplete,下面还是来看看这几个标签的使用. 一.html禁止input文本框输入 readonly 属性规定输入字段为只读.只读字段是不能修改的.不过,用户仍然可以使用tab键切换到该字段,还可以选中或拷贝其文本. <input readonly="readonly" value="xxxx"/> 加入type="text属性的代码编

js控制文本框输入的字符类型方法汇总

这篇文章主要给大家汇总介绍了js控制文本框输入的字符类型的各种方法,十分的简单实用,有需要的小伙伴可以参考下.     JS 控制文本框只能输入数字    代码如下: <input onkeyup="value=value.replace(/[^0-9]/g,'')" onpaste="value=value.replace(/[^0-9]/g,'')" oncontextmenu ="value=value.replace(/[^0-9]/g,''

jQuery实现文本框输入同步的方法

  本文实例讲述了jQuery实现文本框输入同步的方法.分享给大家供大家参考.具体如下: 这段jquery代码可以保持一个文本框输入的同时另外一个文本框与之同步 ? 1 2 3 4 var $inputs = $(".example-input"); $inputs.keyup(function() { $inputs.val($(this).val()); }); 希望本文所述对大家的jQuery程序设计有所帮助.

jQuery实现限制textarea文本框输入字符数量的方法

  本文实例讲述了jQuery实现限制textarea文本框输入字符数量的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 (function($) { $.fn.extend( { limiter: function(limit, elem) { $(this).on("keyup focus", function() { setCount(this, elem); }

js/jquery获取文本框输入焦点的方法

 本篇文章主要是对js/jquery获取文本框输入焦点的方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 方法一.    代码如下:  function CheckForm() {              if(document.form1.trainingName.value==""){                      alert("培训班名称不能为空!");                      document.form1.trai

jQuery实现限制textarea文本框输入字符数量的方法_jquery

本文实例讲述了jQuery实现限制textarea文本框输入字符数量的方法.分享给大家供大家参考.具体实现方法如下: (function($) { $.fn.extend( { limiter: function(limit, elem) { $(this).on("keyup focus", function() { setCount(this, elem); }); function setCount(src, elem) { var chars = src.value.lengt