只允许在 JTextField 中输入数字和符号 (-)

2024-02-03

我正在尝试创建一个数学测验,我只希望用户能够输入数字,无论它们是负数还是正数。有什么办法可以做到吗?我曾考虑过使用正则表达式,但听说它们不好用。我尝试使用按键侦听器,但是如果用户粘贴怎么办?我尝试解析字符串以获取整数,但负号将不起作用。

有任何想法吗?

package com.quiz.ui;

import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

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

public class SSCCE {

    private JFrame frame;

    private JPanel contentPane;

    private JTextField usernameField;

    public static void main(String[] arguments) {
        new SSCCE().construct();
    }

    public void construct() {
        frame = new JFrame("Login");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(getContentPane());
        frame.pack();
        frame.setVisible(true);
    }

    public JPanel getContentPane() {
        usernameField = new JTextField(5);
        usernameField.addKeyListener(new KeyListener() {

            @Override
            public void keyPressed(KeyEvent arg0) {
                int keyCode = arg0.getKeyCode();
                if ((keyCode > 47 && keyCode < 58) || keyCode == 45) {
                    arg0.consume();
                }
                System.out.println(arg0.getKeyCode());
            }

            @Override
            public void keyReleased(KeyEvent arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void keyTyped(KeyEvent arg0) {
                // TODO Auto-generated method stub

            }
        });

        contentPane = new JPanel(new BorderLayout());
        contentPane.add(usernameField);

        return contentPane;
    }

}

Use 文档过滤器 http://download.oracle.com/javase/6/docs/api/javax/swing/text/DocumentFilter.html:

NumberOnlyFilter.java:

import javax.swing.*;
import javax.swing.text.*;
import java.util.regex.*;
public class NumberOnlyFilter extends DocumentFilter
{

    public void insertString(DocumentFilter.FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException
    {
        StringBuilder sb = new StringBuilder();
        sb.append(fb.getDocument().getText(0, fb.getDocument().getLength()));
        sb.insert(offset, text);
        if(!containsOnlyNumbers(sb.toString())) return;
        fb.insertString(offset, text, attr);
    }
    public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attr) throws BadLocationException
    {
        StringBuilder sb = new StringBuilder();
        sb.append(fb.getDocument().getText(0, fb.getDocument().getLength()));
        sb.replace(offset, offset + length, text);
        if(!containsOnlyNumbers(sb.toString())) return;
        fb.replace(offset, length, text, attr);
    }

    /**
     * This method checks if a String contains only numbers
     */
    public boolean containsOnlyNumbers(String text)
    {
        Pattern pattern = Pattern.compile("([+-]{0,1})?[\\d]*");
        Matcher matcher = pattern.matcher(text);
        boolean isMatch = matcher.matches();
        return isMatch;
    }

}

然后你可以像这样使用它:

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

只允许在 JTextField 中输入数字和符号 (-) 的相关文章

随机推荐

  • 使用 Spring AOP 进行方法分析(基本执行时间)

    我正在寻找一种功能或软件 它可以让我轻松地分析我的方法执行时间并选择通过包过滤器分析的内容 我知道 它是探查器 101 我使用 TPTP 分析器 但我对此并不满意 坦率地说 我只是不明白它是如何工作的 当我分析我的应用程序 以分析模式启动服
  • xpath:查找不同行中具有相同位置的表格单元格

    我正在解析一个包含如下结构的网页 tr td Label 1 td td Label 2 td td Label 3 td td Something else td lt tr gt tr td Item 1 td td Item 2 td
  • 什么是 {block:Hidden} 以及何时使用它?

    block Hidden
  • htaccess 获取不带路径的文件名

    我正在尝试获取所请求的不带路径的文件名使用 htaccess 作为 RewriteCond REQUEST FILENAME返回完整的绝对路径 但我只需要文件名 例如test php 我一直在寻找这个很多 但找不到任何可以帮助我的东西 感谢
  • Webdeploy权限问题

    我有 3 个 Web 部署 Visual Studio 将项目发布到包 包 我使用 msdeploy 命令与服务器同步 其中一个包是新添加的 除了新添加的包之外 其他两个包都工作正常 我在日志中看到以下错误 我不确定在哪里设置此权限 因为
  • TCP - 接收顺序错误

    是否有可能以错误的顺序 由序列号指示 获取 TCP 数据包 那么接收方会发生什么 例如 是否有任何队列容纳 太早 到达的口袋 或许 接收 TCP 引擎对于要做什么有多种选择 它唯一不能做的就是将这些无序数据包中的数据无序地传递到接收进程 接
  • 表 MYSQL 的密钥文件不正确

    当我想按查询分组时 我收到此错误消息 Incorrect key file for table tmp sql 623d 0 MYI try to repair it 它是一个 InnoDB 表 有 3 000 000 条记录 大小为 4
  • PHP 的设计模式 - 访问者模式与仆人模式

    我发现这两种模式很相似 以及大多数其他行为模式 访客模式 interface Visitor public function visit Visitable Visitable interface Visitable public func
  • java.lang.ClassCastException:org.ksoap2.serialization.SoapPrimitive?

    我正在从我的 Android 客户端应用程序调用 Web 服务 当我尝试显示它时得到响应后 我收到 ClassCastException 以下是我的代码 public void onClick View v setContentView R
  • mysql_insert_id 使用安全吗?

    根据 PHP 文档 mysql insert id从 mysql 表中获取最后插入的 id 我的问题是 如果我有一个网站每秒向数据库插入超过 2 行 我可以使用mysql insert id并获取我在中提到的正确 IDINSERT查询之前的
  • Redis“客户端列表”用途和说明

    在执行 客户端列表 时 我得到以下结果 每个标志的含义是什么 奴隶 addr 100 0 0 0 0000 fd 5 空闲 3 标志 S db 0 sub 0 psub 0 qbuf 0 obl 0 oll 0 事件 r cmd sync
  • 签名板和 dompdf

    我在用托马斯 J 布拉德利的插件 http thomasjbradley ca lab signature pad 用于在 html 表单底部绘制两个签名 然后使用 dompdf 将其转换为 pdf 并使用 sendmail 作为附件通过电
  • Cumulocity smarREST 响应模板

    我正在尝试设置 Cumulocity smartREST 响应模板以提供应用程序存储的设备对象的信息 我认为这是不可能的 但我想确认一下 因为文档很简短而且不清楚 我之前已经成功实现了测量发布模板 但我现在正在尝试执行库存获取 我已经在设备
  • Delphi 中 JSON 与 XML 解析速度

    我们正在创建一个使用大量 XML 解析的应用程序 我想也许可以使用 JSON 因为我们可以使用 JSON 作为 XML 的替代品 我需要测试 JSON 或 XML 哪个更快 但想先在这里征求意见 JavaScript 中的 JSON 是原生
  • PHP 错误处理适用于 MySQL 和 MySQLi,但不适用于 PDO

    我刚刚将一堆 MySQL 和 MySQLi 表单重构为 PDO 一切似乎都正常 现在开始错误处理 在我一直使用的 MySQL MySQLi 代码中if语句来捕获错误 像这样 if database connection error hand
  • 如何减小我从 keras 转换的 .tflite 的大小

    我刚刚转换了一个Keras model h5 resnet50 img classify 在谷歌上创建COLAB to tflite但尺寸只是减小了0 5 MB 这是针对移动应用程序的 大小应该进一步减小 它大约有 90MB 对于生产来说太
  • 使用 jQuery 根据原始值修改每个文本字段的值

    是否可以使用 jQuery 或 JavaScript 根据原始值修改网页中存在的每个文本字段的值 例如 假设一个页面中有 50 个文本字段 我想删除每个文本字段值的开头和结尾的空格 我认为单独为每个文本字段调用该函数并不是一个好主意 如何在
  • PHP 中的 __call、__callStatic 和调用范围

    我最近读到有关在 PHP 中调用作用域和作用域解析运算符 的内容 有两种变体 实例调用和静态调用 考虑以下听力
  • sencha 中的按钮背景颜色

    我是 sencha touch 的新手 我们如何将按钮的背景颜色更改为白色 我有一个按钮 每个角都有两个图像 我希望按钮是纯白色的 我尝试使用这样的CSS quest background url images quest jpg no r
  • 只允许在 JTextField 中输入数字和符号 (-)

    我正在尝试创建一个数学测验 我只希望用户能够输入数字 无论它们是负数还是正数 有什么办法可以做到吗 我曾考虑过使用正则表达式 但听说它们不好用 我尝试使用按键侦听器 但是如果用户粘贴怎么办 我尝试解析字符串以获取整数 但负号将不起作用 有任