Tag: documentfilter

强制JTextField为字符串值,而DocumentFilter仅允许数字

我正在研究一个Java应用程序并遇到了一个我自己似乎无法解决的问题。 我在JTextField上设置了一个DocumentFilter ,只允许数字输入,但默认值是文本。 我有一个按钮将JTextField重置为默认值,并且由于DocumentFilter而无法正常工作。 我怎样才能克服这个问题? 谢谢

DocumentFilter的正则表达式匹配所有十进制数,但最后只有一个小数

问题首先 :我需要正则表达式匹配111或111.或111.111 (只是aritrarty数字)为DocumentFilter 。 我需要用户能够输入111.带decimal ,之后没有任何内容。 似乎无法做对。 我找到的所有正则表达式都只匹配所有十进制数字即 12343.5565 32.434 32 喜欢这个正则表达式 ^[0-9]*(\\.)?[0-9]+$ 问题是,我需要DocumentFilter的正则表达式,因此输入只能是带/不带小数点的数字。 但问题是它还需要匹配 1223. 因此用户可以在文本字段中输入小数。 所以基本上我需要正则表达式匹配 11111 // all integer 11111. // all integers with one decimal point and nothing after 11111.1111 // all decimal numbers 到目前为止我的模式是上面的模式。 这是一个测试程序(适用于Java用户) 可以在此行中输入模式 Pattern regEx = Pattern.compile(“^[0-9]*(\\.)?[0-9]+$”); 如果正则表达式适合账单,那么您将能够输入111或111.或111.111 。 运行 :) import java.awt.GridBagLayout; import java.util.regex.*; import javax.swing.*; […]

在DocumentFilter中使用正则表达式来解决JTextField问题

我在JTextField上使用DocumentFilter ,用于输入员工工作的时间。 filter是为了确保输入限制只有4个字符长,并且只允许数字。 可以使用或不使用小数,但只允许输入一次,输入小数后,应该只允许一个小数。 应接受9.5或10.5的含义,而不接受8.45。 到目前为止,我能够获得所需function的一半左右。 最多可输入4个字符,仅允许数字。 后者是使用replaceAll(“[^0-9.]”, “”)方法完成的。 我花了很多时间观看教程,阅读文档和相关问题,比如这个 , 这个 ,特别是这个,但似乎无法获得正则表达式。 特别是我无法弄清楚的一件事是为什么[^0-9]的正则表达式只能成功地允许数字,但^\\d除非作为字符类包含,例如[\\d] 我的filter代码如下: import java.awt.Toolkit; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.DocumentFilter; public class TimeWorkedFilter extends DocumentFilter { private int maxCharacters; public TimeWorkedFilter(int maxChars) { maxCharacters = maxChars; } //”[^0-9.] public void insertString(FilterBypass fb, int offs, String str, AttributeSet a) throws BadLocationException { if […]

使用文档列表器限制文本字段中的字符

如何使用DocumentListener限制在JTextField输入的字符数? 假设我想最多输入30个字符。 之后,不能输入任何字符。 我使用以下代码: public class TextBox extends JTextField{ public TextBox() { super(); init(); } private void init() { TextBoxListener textListener = new TextBoxListener(); getDocument().addDocumentListener(textListener); } private class TextBoxListener implements DocumentListener { public TextBoxListener() { // TODO Auto-generated constructor stub } @Override public void insertUpdate(DocumentEvent e) { //TODO } @Override public void removeUpdate(DocumentEvent e) { […]

使用DocumentFilter.FilterBypass

我希望在DocumentFilter上有这样的方法 public void replaceUpdate(int offset, int length, String text) { try { super.replace(byPass, offset, length, text, null); } catch (BadLocationException ex) { //error } } 目前为了获得FilterBypass的实例(上面的方法中的byPass),我需要从重写的方法insertString获取: private FilterBypass byPass; @Override public void insertString(DocumentFilter.FilterBypass fb, int offset, String string, AttributeSet att) throws BadLocationException { byPass = fb; //some stuff here super.insertString(fb, offset, string, att); } 但这给我带来了一些问题。 […]

只允许将数字和符号( – )输入JTextField

我正在尝试创建一个数学测验,我只希望用户能够输入数字,无论它们是负数还是正数。 有没有办法这样做? 我曾经想过使用正则表达式,但我听说它们使用起来很糟糕。 我尝试使用keylistener,但如果用户粘贴了怎么办? 我试过解析字符串得到一个整数但负面符号不起作用。 有任何想法吗? 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); } […]