JAVA限制文本框输入-阿里云开发者社区

开发者社区> 蒋固金> 正文

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10062 0
《Java编码指南:编写安全可靠程序的75条建议》—— 指南1:限制敏感数据的生命周期
内存中的敏感信息很容易受到攻击,导致泄漏。对于以下条件,不管应用程序满足哪一个,能在应用程序所在的系统上执行代码的攻击者,都能访问这些数据。
1601 0
Java程序在K8S容器部署CPU和Memory资源限制相关设置
背景 在k8s docker环境中执行Java程序,因为我们设置了cpu,memory的limit,所以Java程序执行时JVM的参数没有跟我们设置的参数关联,导致JVM感知到的cpu和memory是我们k8s的work node上的cpu和memory大小。
5696 0
Java中的访问控制权限
简介 Java中为什么要设计访问权限控制机制呢?主要作用有两点: (1)为了使用户不要触碰那些他们不该触碰的部分,这些部分对于类内部的操作时必要的,但是它并不属于客户端程序员所需接口的一部分。 (2)为了让类库设计者可用更改类的内部工作方式,而不必担心会对用户造成重大影响。
669 0
文本框中只能输入数字
1 同上上篇日志  老师给的代码 Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.
720 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13875 0
Kubernetes之路 1 - Java应用资源限制的迷思
随着容器技术的成熟,越来越多的企业客户在企业中选择Docker和Kubernetes作为应用平台的基础。然而在实践过程中,还会遇到很多具体问题。本文分析并解决了Java应用在容器使用过程中关于Heap大小设置的一个常见问题。
15212 0
+关注
115
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载