Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JOptionPane中向多个文本字段添加验证?_Java_Swing_Validation_Joptionpane - Fatal编程技术网

Java 如何在JOptionPane中向多个文本字段添加验证?

Java 如何在JOptionPane中向多个文本字段添加验证?,java,swing,validation,joptionpane,Java,Swing,Validation,Joptionpane,我有以下方法,当点击按钮时弹出一个窗口 public void cardPopUp() { String[] cardTypes = {"Visa", "Mastercard", "Electron", "Cashcard"}; JComboBox combo = new JComboBox(cardTypes); JTextField field1 = new JTextField(""); JTextField field2 = new JTextField

我有以下方法,当点击按钮时弹出一个窗口

public void cardPopUp() {
    String[] cardTypes = {"Visa", "Mastercard", "Electron", "Cashcard"};

    JComboBox combo = new JComboBox(cardTypes);
    JTextField field1 = new JTextField("");
    JTextField field2 = new JTextField("");
    JTextField field3 = new JTextField("");
    JTextField field4 = new JTextField("");
    JTextField field5 = new JTextField("");

    JPanel panel = new JPanel(new GridLayout(0, 2));
    panel.add(new JLabel("Card Type:"));
    panel.add(combo);
    panel.add(new JLabel("Cardholder Name:"));
    panel.add(field1);
    panel.add(new JLabel("Card Number:"));
    panel.add(field2);
    panel.add(new JLabel("Month Expiry:"));
    panel.add(field3);
    panel.add(new JLabel("Year Expiry:"));
    panel.add(field4);
    panel.add(new JLabel("CVC:"));
    panel.add(field5);

    int input = JOptionPane.showConfirmDialog(MainActivity.this, panel, "Card Payment",
            JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
        if (input == JOptionPane.OK_OPTION) {
            Basket.orderNo+=1;
            dispose();
            new OrderConfirmationScreen().setVisible(true);
        } else {
            System.out.println("Payment Cancelled");
        }
}
如何添加验证,以便检查字段以查看是否为卡支付输入了正确的数据。例如,
field1
应该只允许文本,
field2
应该只允许16位数字,依此类推


我猜我需要创建更多的方法来验证每个字段,然后在
cardPopUp()
method中调用该方法。

因为我理解你的问题,你想要的是匹配输入的字符类型,为此,我建议查看字符串。匹配项请参见使用此选项,您可以设置一个函数,检查输入是否存在任何regrex抑制,并返回true或false,如果这不是您想要的,恐怕我不理解问题,例如:

field1
应仅允许文本

field2
应只允许16位数字


诸如此类。

只是对未来的一个建议,若你们不知道原始海报想要什么,在你们有明确的想法之前不要回答。我对你们给出的
字段2
示例有问题。我在
上有一个错误。matches
Eclipse要求我首先将强制转换添加到
field2
,然后当我这样做时,它会说“不能从JTextField强制转换到String”。我试图解析
field2
,但它说“不能调用基本类型int上的匹配项”。很抱歉,您应该使用
field2.getText().matches((\\d{16})”)
我已经编辑了我的答案@user982467
“^[\\p{L}.-]+$”
此正则表达式更适合于
字段1
,因为它是持卡人姓名,并且应该允许空格以及人们姓名中的一些其他特殊字符。请查看
if(field1.getText().matches("\\w+\\.?")){
  ...
}else{...}
if(field2.getText().matches("(\\d{16})")){
  ...
}else{...}