JTextField设置输入限制

2024-04-18

您好,我正在尝试使用 setDocument 方法来限制用户可以在文本字段中输入的字符数。但不知怎的,它并没有限制输入字符的数量。这是代码

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


public class JTextFieldCharLimit extends PlainDocument {


    private int limit;

    public JTextFieldCharLimit(int limit)
    {
        super();
        this.limit = limit;
    }
    public void inserString(int offset, String str, AttributeSet set) throws BadLocationException
    {
        if(str == null)
        {
            return;
        } else if((getLength() + str.length()) <= limit)
        {
            str = str.toUpperCase();
            super.insertString(offset, str, set);
        }
    }




}

我在另一个类中使用这个类,我在其中声明了我的文本字段,如下所示:

void playerInfoScreen(JFrame mainFrame, JPanel menuPanel)
    {
        final ScreenConstructor playerName = new ScreenConstructor();
        final JFrame frame = mainFrame;
        final JPanel returnPanel = menuPanel;

        final JPanel panel = playerName.createPanel("menu panel");

        final JButton returnButton = playerName.createButton("MAIN MENU");
        final JTextField textEntry = playerName.createTextField(10);
                // text field length needs to be set to prevent long texts
        final JLabel label = playerName.createLabel("Enter Player Name:");

        playerName.addButtonToPanel(panel, returnButton);
        playerName.addLabelToPanel(panel, label);
        playerName.addJTextFieldToPanel(panel, textEntry);

        textEntry.setDocument(new JTextFieldCharLimit(5));
        playerName.displayScreen(frame, panel);
            // check for esc button to let user return back to main menu




        textEntry.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                String player = textEntry.getText(); // save entered player name
                storedPlayerName = player; // store player in order to use it in highscores and display on game screen
                GameScreen game = new GameScreen(frame, panel); // go to game screen 
            }
        });


        returnButton.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                frame.setContentPane(returnPanel); // go back to previous panel
            }
        });




    }

Use a DocumentFilter. See 实现文档过滤器 http://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html#filter and 文档过滤器示例 http://www.jroller.com/dpmihai/entry/documentfilter更多细节。

public class SizeFilter extends DocumentFilter {

    private int maxCharacters;    

    public SizeFilter(int maxChars) {
        maxCharacters = maxChars;
    }

    public void insertString(FilterBypass fb, int offs, String str, AttributeSet a)
            throws BadLocationException {

        if ((fb.getDocument().getLength() + str.length()) <= maxCharacters)
            super.insertString(fb, offs, str, a);
        else
            Toolkit.getDefaultToolkit().beep();
    }

    public void replace(FilterBypass fb, int offs, int length, String str, AttributeSet a)
            throws BadLocationException {

        if ((fb.getDocument().getLength() + str.length()
                - length) <= maxCharacters)
            super.replace(fb, offs, length, str, a);
        else
            Toolkit.getDefaultToolkit().beep();
    }
}

归功于 MDP

((AbstractDocument)textEntry.getDocument()).setDocumentFilter(new SizeFilter(5));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JTextField设置输入限制 的相关文章

  • 如何使用java按上次更新时间对SFTP文件进行排序?

    I am having a set of text files in my FTP server 我想阅读今天之前上传的所有文件 其中我必须打印最后三个上传文件的属性 名称 上传时间 大小 现在我将能够打印 FTP 服务器中存在的文件的名称
  • 如何更改 apache poi 生成的图表,使其不使用平滑线并将空单元格显示为间隙?

    我正在使用 POI 3 12 beta1 并拥有可创建包含多个数据集和图例中命名系列的折线图的代码 但是 poi 中折线图的默认设置会生成一条已在数据点上平滑的线 空值也被绘制为 0 但我们希望线条停在有空单元格的第一列 在 xlsx 文件
  • Spring AOP 是否进行编译时编织或加载时编织?

    我开始在一个项目中使用 Spring AOP 但我对编织有点困惑 我知道 Spring AOP 依赖于 AspectJweaver jar 但正如文档所说 这不是为了编织 而只是它使用了这个 jar 中的一些类 但我的问题是 如果不使用As
  • 为什么我没有这个类,而它应该在 rt.jar 中?

    所以 我正在尝试在 java 中实现 LDAP 连接 这需要com sun jndi ldap LdapCtxFactory 贾芬德表明LdapCtxFactory应包含在rt jar 据我了解 这是java SDK的基础 Eclipse
  • 在 Java 中打印 HashMap

    我有一个HashMap private HashMap
  • NGINX 与 Tomcat 配置

    我是 Nginx 新手 我需要你的帮助 根据很多论坛我了解到我们所有的静态页面都存储在Nginx中 当有请求到来时 我必须将该请求传递给 tomcat 获取数据 并在 tomcat 生成响应后生成响应 目前 我刚刚做到了 我将请求直接传递给
  • 添加月份时的 Java 日历/日期问题

    如果我们在当前日期 2013 年 5 月 31 日星期五 18 33 00 IST 2013 中添加 1 个月 则会产生 2013 年 6 月 30 日星期日 18 33 00 国际标准时间 如果我们减去 1 个月 则得出 2013 年 5
  • 当点击 JButton 连接到服务器时,程序冻结

    我正在使用 Java 中的 TCP 进行简单的 1v1 私人聊天 目前 每当我使用 JButtons 时都会遇到问题 这是我第一次尝试使用 JButtons 和 ActionListeners 所以我不能 100 确定这里发生了什么 我有两
  • 以字符集安全的方式获取 Windows 上的进程列表

    这个帖子 https stackoverflow com questions 54686 how to get a list of current open windows process with java给出了一个在 Windows 下
  • TextWatcher.onTextChanged 被多次调用

    我已经阅读了有关此问题的一些主题 但找不到完整的答案 我有一个包含 3 行的 ListView 每行包含一个 TextView 和一个 EditText 以及一个扩展 BaseAdapter 的自定义适配器 这是适配器的 getView 函
  • 如何将 Netbeans 项目导入 Eclipse

    我想将我的 NetBeans 项目转移到 Eclipse 这是一个网络应用程序项目 我将 war 文件导入到 Eclipse 中 但无法获取 Java 文件 并且 war 文件给了我很多错误 导入整个项目的最佳方式是什么 另一种简单的方法如
  • Java中使用什么方法来销毁你的对象[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 你能为我的问题举一个例子吗 抱歉 J
  • 使用 Google Collections 创建弱多重地图

    是否有与 MultiMaps 的 MapMaker 相当的工具 目前我像这样创建缓存 public static Map
  • Java垂直布局?

    我需要将 JLabel 垂直放置在一些 JButton 上 就像游戏菜单一样 它们都应该居中 我已经下载了 MigLayout 但我不知道如何使用它 所以我只是想要一种方法来垂直和居中定位我的组件 无论 MigLayout 与否 另外 我不
  • 破译Streamreduce函数

    为什么两者都是c1 and c2不被视为两个字符串 而是一个String和一个Integer Arrays asList duck chicken flamingo pelican stream reduce 0 c1 c2 gt c1 l
  • SQL 查询中的外语/重音字符

    我正在使用 Java 和 Spring 的 JdbcTemplate 类在 Java 中构建一个 SQL 查询来查询 Postgres 数据库 但是 我在执行包含外来 重音字符的查询时遇到问题 例如 修剪后的 代码 JdbcTemplate
  • 对堆排序有一个直观的理解吗?

    在学校 我们目前正在学习 Java 排序算法 我的作业是堆排序 我读了书 试图尽可能多地了解 但似乎我无法理解这个概念 我并不是要求您为我编写一个 Java 程序 只要您能尽可能简单地向我解释堆排序的工作原理即可 是的 所以基本上你拿一个堆
  • 如何从 InputStream 读取一行而不缓冲输入? [复制]

    这个问题在这里已经有答案了 我有一个输入流 其中包含一行字符串 然后是二进制数据 如果我使用读取该行new BufferedReader new InputStreamReader inputStream 二进制数据也正在被读取并且不能被重
  • OSGI Felix 容器正在初始化模拟私有字段

    我试图模拟我的类中的一个私有字段 该字段由运行我的应用程序的 OSGI 容器初始化 我放了一个示例代码供参考 请提供任何线索 import org apache felix scr annotations Component name My
  • 将 GDCM 图像转换为 Java BufferedImage

    我正在使用 GDCM 读取 DICOM 图像 有没有一种简单的方法可以使用 GDCM 读取 dicom 文件 然后将其转换为 Java BufferedImage 到目前为止我有以下内容 String filename C test dcm

随机推荐

  • 释放 GCD 调度队列属性的正确方法是什么?

    我正在使用一个dispatch queue 它是通过其所有者的属性访问的 如下所示 property nonatomic assign dispatch queue t queue 请注意assign关键词 队列在对象的整个生命周期中使用
  • 嵌套属性未以简单形式显示

    鉴于以下情况 Models class Location lt ActiveRecord Base has many games end class Game lt ActiveRecord Base validates presence
  • 如何获取 BTreeSet 中元素的下界和上限?

    正在阅读BTreeSet文档 我似乎无法弄清楚如何从 a 中获取大于元素的最小值或小于元素的最大值BTreeSet在对数时间内 我看到有一个range https doc rust lang org std collections stru
  • 将 Elmah 与 WebApi 结合使用时,错误会记录两次

    我正在尝试使用 elmah 记录我的 asp net web api 项目中的异常 我遇到的问题是每个错误都会记录两次 我正在使用 Elmah Contrib Web Api 我的应用程序类如下 public class WebApiApp
  • 用 R 计算年龄

    我在 R 中有两个数据帧 其中一个数据帧包含一个人的出生年份 YEAR 1931 1924 然后另一列显示最近的时间 RECENT 09 08 2005 11 08 2005 我想做的是减去年份 以便我可以计算他们的年龄 但我不知道如何处理
  • Rails respond_with:它是如何工作的?

    我到处读到关于它有多酷的内容respond with方法在 Rails 3 中 但我什至无法在 Rails API 中或通过搜索源代码找到对它的引用 任何人都可以向我解释它是如何工作的 您可以使用哪些选项等 或者向我指出它实际实现的位置 以
  • 在事务结束时发送事件

    我有一个服务对象的接口 如下所示 为简洁起见进行了简化 public interface ItemService public Item getItemById String itemId int version public void c
  • 部署到 Docker 时外部化 Spring Boot 属性

    在我的 Spring Boot 应用程序中 我想将属性外部化以在 Docker 容器中运行 首次部署时 当前的属性my server src main resources application yml由应用程序按预期加载和使用 一切正常
  • 如何修复这个已有 8 年历史的 VBA 64 位编译器错误?

    所以这就是错误 64 BitVBA主机 例如Access 365 64位或Excel 2016 64位 创建类模块SomeClass this needs to be here to trigger the bug Private Sub
  • Hashmap 单键保存一个类。计算密钥并检索计数器

    我正在开发一个数据库自我项目 我有一个来自以下位置的输入文件 http ir dcs gla ac uk resources test collections cran http ir dcs gla ac uk resources tes
  • 将数据表保存到文本文件的最短方法

    我刚刚找到了一些答案 但发现它们都非常长并且有很多迭代 所以我想出了自己的解决方案 将表转换为字符串 string myTableAsString String Join Environment NewLine myDataTable Ro
  • JavaScript 中的封装

    很久以前 我看到有人用如下代码封装了整个 JavaScript 块 function this 问题 上面的代码正确吗 像上面提到的那样封装整个 JavaScript 块有什么好处 对 那是正确的 它称为自调用匿名函数表达式 JavaScr
  • SQL Server DateTime 参数“舍入”警告

    与其说是问题 不如说是警告 今天早上我们解决了一个非常令人费解的错误 我们有各种报告 允许用户输入他们想要运行的日期范围 假设是 如果您要求提供 2010 年 8 月 1 日至 2010 年 8 月 10 日的报告 您的意思是include
  • android内容提供者总和查询

    是否可以使用getContentResolver query 当我想要的时候sum column OR 我是否必须对数据库句柄进行原始查询 当提供列数组时ContentResolver query 将列名称括起来sum 功能 String
  • 将python程序转换为windows可执行文件

    我正在尝试从具有 GUI 的 python 程序创建 Windows 可执行文件 我正在使用以下脚本 from distutils core import setup import py2exe setup console gui py 它
  • Typescript 阻止节点/模块工厂模式:错误 TS4060

    当使用 ES6 模块语法导出返回 Typescript 类实例的工厂函数时 会产生以下错误 错误 TS4060 导出函数的返回类型具有或正在使用私有名称 Paths 来自 paths ts Class scoped behind the e
  • Google Map API 通过邮政编码获取地址信息,但它通过街道号码响应结果

    我正在使用谷歌地图 API 通过世界各地的邮政编码获取地址信息 非特定国家 地区 我预计邮政编码是 610 但 google 响应结果是街道号码 610 有什么方法可以仅通过邮政编码获取地址吗 预先感谢各位的支持 与此查询一起进行的操作怎么
  • 如何在 SVG 中制作不同大小的内嵌文本?

    在 HTML 中为不同的单词创建具有不同字体大小的文本非常容易 但是关于
  • for(:) 在 Java 中是什么意思?

    package MyTest import java beans BeanInfo import java beans Introspector import java beans PropertyDescriptor class Pers
  • JTextField设置输入限制

    您好 我正在尝试使用 setDocument 方法来限制用户可以在文本字段中输入的字符数 但不知怎的 它并没有限制输入字符的数量 这是代码 import javax swing text AttributeSet import javax