【问题标题】:How to add validation to multiple text fields in JOptionPane?如何向 JOptionPane 中的多个文本字段添加验证?
【发布时间】:2017-03-20 20:11:45
【问题描述】:

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

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() 方法中调用该方法。

【问题讨论】:

标签: java swing validation joptionpane


【解决方案1】:

例如:

field1 应该只允许文本

if(field1.getText().matches("\\w+\\.?")){
  ...
}else{...}

field2 应该只允许 16 位数字

if(field2.getText().matches("(\\d{16})")){
  ...
}else{...}

等等。

【讨论】:

  • 我对您给出的 field2 示例有疑问。我在.matches 上有一个错误,Eclipse 要求我先将演员表添加到field2,然后当我这样做时,它会说“无法从 JTextField 转换为字符串”。我尝试解析field2,但它说“不能在原始类型 int 上调用匹配”。
  • 对不起,你应该使用field2.getText().matches("(\\d{16})")我已经编辑了我的答案@user982467
  • "^[\\p{L} .'-]+$" 这个正则表达式更适合field1,因为它是持卡人姓名,应该允许空格以及人们姓名中的其他一些特殊字符。
【解决方案2】:

我理解你的问题,你想要的是匹配输入的字符类型,为此我建议看一下 String.matches 参见javaDoc 使用这个你可以设置一个检查输入的函数对于任何正则表达式并返回真或假,如果这不是你想要的,恐怕我不明白这个问题

【讨论】:

  • 只是对未来的建议,如果您不知道原始发布者想要什么,请在您有明确的想法之前不要回答。
猜你喜欢
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多