Java 在JFormattedTextField中实现正则表达式

Java 在JFormattedTextField中实现正则表达式,java,regex,Java,Regex,我想在jFormattedTextField中使用正则表达式模式,如果可能的话,在JTextField中使用正则表达式模式,这与工作是否完成并不重要。我知道如何使用MaskFormatter和DocumentFilter,但我想知道是否可以使用regex模式 以下是我尝试的代码: import java.awt.GridLayout; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swi

我想在jFormattedTextField中使用正则表达式模式,如果可能的话,在JTextField中使用正则表达式模式,这与工作是否完成并不重要。我知道如何使用MaskFormatter和DocumentFilter,但我想知道是否可以使用regex模式

以下是我尝试的代码:

import java.awt.GridLayout;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;

public class Test1 {
    public static void main(String args[]) {
        JFrame frame = new JFrame();
        String regex = "[a-z]";
        Pattern pt = Pattern.compile(regex);
        Matcher r = pt.matcher("(.*)([a-z])");
        JFormattedTextField ft = new JFormattedTextField(pt);

        JTextField testField = new JTextField();
        ft.addCaretListener(new CaretListener() {
            public void caretUpdate(CaretEvent e) {
                if (!r.find()) {
                    testField.setText("not found");
                } else
                    testField.setText("found");
            }
        });
        frame.setLayout(new GridLayout(2, 1));
        frame.add(ft);
        frame.add(testField);
        frame.pack();
        frame.setVisible(true);
    }
}

但是它不起作用,没有找到。有没有办法做到这一点?因为我已经练习了一段时间,所以我觉得使用正则表达式更舒服。

我不知道为什么您要搜索匹配的模式。您是否尝试执行以下操作

import java.awt.GridLayout;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;

public class Test1 {

    public static void main(String args[]) {
        JFrame frame = new JFrame();
        String regex = "[a-z]";
        Pattern pt = Pattern.compile(regex);
        JFormattedTextField ft = new JFormattedTextField(pt);

        JTextField testField = new JTextField();
        ft.addCaretListener(new CaretListener() {
            public void caretUpdate(CaretEvent e) {

                Matcher r = pt.matcher(ft.getText());
                if (!r.find()) {
                    testField.setText("not found");
                } else
                    testField.setText("found");
            }
        });
        frame.setLayout(new GridLayout(2, 1));
        frame.add(ft);
        frame.add(testField);
        frame.pack();
        frame.setVisible(true);
    }

}

我不知道您为什么要搜索匹配的模式,您是否尝试执行以下操作

import java.awt.GridLayout;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;

public class Test1 {

    public static void main(String args[]) {
        JFrame frame = new JFrame();
        String regex = "[a-z]";
        Pattern pt = Pattern.compile(regex);
        JFormattedTextField ft = new JFormattedTextField(pt);

        JTextField testField = new JTextField();
        ft.addCaretListener(new CaretListener() {
            public void caretUpdate(CaretEvent e) {

                Matcher r = pt.matcher(ft.getText());
                if (!r.find()) {
                    testField.setText("not found");
                } else
                    testField.setText("found");
            }
        });
        frame.setLayout(new GridLayout(2, 1));
        frame.add(ft);
        frame.add(testField);
        frame.pack();
        frame.setVisible(true);
    }

}
你根本不需要媒人;String具有更方便的matches方法

假设找到意味着在输入中找到一个字母:

ft.addCaretListener(new CaretListener() {
    public void caretUpdate(CaretEvent e) {
        if (ft.getText().matches(".*[a-z].*"))
            testField.setText("not found");
        else
            testField.setText("found");
    }
});
或者,如果您愿意,您可以使用三元数将其表示为一行:

testField.setText((ft.getText().matches(".*[a-z].*") ? "" : "not ") + "found");
你根本不需要媒人;String具有更方便的matches方法

假设找到意味着在输入中找到一个字母:

ft.addCaretListener(new CaretListener() {
    public void caretUpdate(CaretEvent e) {
        if (ft.getText().matches(".*[a-z].*"))
            testField.setText("not found");
        else
            testField.setText("found");
    }
});
或者,如果您愿意,您可以使用三元数将其表示为一行:

testField.setText((ft.getText().matches(".*[a-z].*") ? "" : "not ") + "found");

我希望这段代码始终返回find,因为您正在查找任何小写拉丁字母,因为[a-z]是您在。*[a-z]字符串中的模式。看一看。您是否打算使用Matcher r=pt.matchertestField.getText;?请举例说明您的问题。我希望此代码始终返回find,因为您正在查找任何小写拉丁字母,因为[a-z]是您在。*[a-z]字符串中的模式。看一看。您是否打算使用Matcher r=pt.matchertestField.getText;?请举例说明你的问题。