JTextField限制只能输入特定字符

server/2024/10/18 6:03:02/

1. 背景

最近写了一个公司内部用的通用MQTT协议JMeter自定义采样器,自定义表达式的处理手法与《JMeter通用Http采样器》https://blog.csdn.net/camelials/article/details/127135630 一致。不同的是协议变了、荷载构造方式变了等。另外,由于结合了自身应用的业务,因此开发难度相比之前的JMeter通用Http采样器大了很多。由于对于请求对象的组装使用了效率相对不高的反射方式,同时还要结合表达式的计算,因此索性把这些事情放在了采样器的前置逻辑阶段用多线程进行处理,这样保障了采样请求组装能力应该是百万/秒左右的级别(直接从Map中取表达式计算、反射方式对象组装的结果,不快那就得有问题了),东西都做的那么细了,那么索性把UI上的事情也抠下细节:限制某些JTextField只能输入特定字符。例如:

  • 采样总数(SampleCount)只能为正整数;
  • 服务器选择权重(ServerChooseWeight)只能为整数(负数表示选择最快的接入点,正数表示强制指定某个接入点)
    如下图:
    在这里插入图片描述

2. IntegerTextField(整数输入框)

java">import javax.swing.*;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;/*** IntegerTextField** @author chenx*/
public class IntegerTextField extends JTextField {public IntegerTextField() {super();}public IntegerTextField(int columns) {super(columns);}@Overrideprotected Document createDefaultModel() {return new IntegerDocument();}/*** IntegerDocument*/private static class IntegerDocument extends PlainDocument {@Overridepublic void insertString(int offs, String str, AttributeSet a) throws BadLocationException {if (str == null) {return;}// 只允许输入数字、负号和删除键if (!str.matches("[\\d-]+") || (str.equals("-") && offs != 0)) {return;}super.insertString(offs, str, a);}}
}

3. PositiveIntegerTextField(正整数输入框)

java">import javax.swing.*;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;/*** PositiveIntegerTextField** @author chenx*/
public class PositiveIntegerTextField extends JTextField {public PositiveIntegerTextField() {super();}public PositiveIntegerTextField(int columns) {super(columns);}@Overrideprotected Document createDefaultModel() {return new PositiveIntegerDocument();}/*** PositiveIntegerDocument*/private static class PositiveIntegerDocument extends PlainDocument {@Overridepublic void insertString(int offs, String str, AttributeSet a) throws BadLocationException {if (str == null) {return;}// 只允许输入数字和删除键if (!str.matches("\\d+")) {return;}super.insertString(offs, str, a);}}
}

4. 总结

限制 JTextField 输入内容的原理涉及到对文本框中的文本进行监听和过滤。Java中,JTextField 使用 Document 对象来管理文本内容。Document 是一个抽象类,JTextField 默认使用 PlainDocument 的实例来存储文本。

限制输入内容的原理通常涉及两个步骤:
1、监听用户输入: 通过添加文本修改监听器(如 DocumentListener)或者拦截键盘输入事件(如 KeyListener),程序能够实时监测用户的输入行为。
2、过滤非法输入: 当监听到用户的输入时,程序会检查输入内容是否符合要求,如果不符合要求则阻止其插入到文本框中。这一步通常在文本插入方法(如 insertString())中进行处理。

在 Java Swing 中,你可以通过继承 PlainDocument 类并重写其 insertString() 方法来实现对输入内容的过滤和限制。在 insertString() 方法中,你可以编写逻辑来检查插入的文本是否符合规定,如果不符合则阻止其插入,这样就能实现限制输入内容的目的。

好吧,我承认这文章一堆废话,瞅两眼代码就啥都明白了,然而却叨叨了一堆。其实没别的,只是在想什么时候可以让《手撸IM专栏》https://blog.csdn.net/camelials/category_12602237.html初具规模,然后把基于它的JMeter通用MQTT采样器给开源出来,毕竟你搞一个IM 服务端的东西出来,不能没有Client去请求并验证它,否则难免有不能自圆其说的味道了。


http://www.ppmy.cn/server/25568.html

相关文章

值得推荐的10款终端安全管理系统排名

终端安全管理系统(UEM)以提高终端系统安全、降低数据泄漏风险为基准,满足企业终端桌面管理、软件合规化、网络管理等内网安全管理需求。 简而言之,终端安全管理系统可以实时了解网络上的计算机,部署补丁、执行维护、验…

Restful API 具体设计规范(概述)

协议 https 域名 https://www.baidu.com/api 版本 https://www.baidu.com/v1 路径 https://www.baidu.com/v1/blogs 方法 数据过滤 状态码返回结果 返回的数据格式 尽量使用 JSON,避免使用 XML。 总结: 看 url 就知道要什么看 http method 就知道干…

2024年武汉东湖高新水测成绩出来了

本次水测通过人员有1016名,通过的人数还是蛮多的,水测其实没有大家想象的那么难,现在职称评审都是水测线下评审的模式进行的。 水平测试分机考,笔试和面试答辩,各区随机安排选其一,机考就相当于考驾照刷题&…

基于RK1126的小型化低功耗AI相机,支持人体特征识别、人脸特征识别、案例帽识别等

提供可定制的⼀套 AI相机软硬件开发平台, 硬件采⽤ RockchipRV1126处理器解决 ⽅案,可选择搭配 SonyIMX系列传感器,POE供电与数据传输,采⽤ 38板标准结构设计,快速按需定制外壳,⽀撑从开发到验证到批量⽣产…

LeetCode 每日一题 ---- 【1017.负二进制转换】

LeetCode 每日一题 ---- 【1017.负二进制转换】 1017.负二进制转换方法一:模拟进制转换推广:任意进制转换 1017.负二进制转换 方法一:模拟进制转换 我们平常做进制转换最常用的方法就是辗转相除法,下面的图示分别给出了普通的10…

二维码门楼牌管理应用平台:智慧城市的新引擎

文章目录 前言一、数据管理:打造智慧城市的数据基石二、数据应用:推动城市管理的智能化升级三、展望未来:构建更加智慧的城市管理体系 前言 随着城市化的快速推进,城市管理面临着前所未有的挑战。二维码门楼牌管理应用平台作为一…

机器学习学习 - 数据预处理

机器学习学习笔记 - 数据预处理 数据预处理是机器学习项目中不可或缺的一环,它涉及到数据的清洗、格式化、归一化、特征提取等一系列操作,以便为后续的模型训练和分析提供高质量的数据集。以下是关于数据预处理的一些关键步骤和注意事项。 一、数据准备…

vue2 实现echarts图表进入可视区域后再加载动画,以及 使用了resize之后,动画失效问题解决

Intersection Observer API 是一个现代的浏览器 API,用于监测一个或多个目标元素与其祖先元素或视窗(viewport)之间的交叉状态(intersection)的变化。它可以有效地监听元素是否进入或离开可视区域,从而实现…