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

时间:2017-03-20 20:11:45

标签: 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("");
    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()方法中调用该方法。

2 个答案:

答案 0 :(得分:1)

例如:

  

field1应该只允许文字

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

field2应该只允许16位数字

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

等等。

答案 1 :(得分:0)

因为我理解你的问题你想要的是匹配输入的字符类型,为此我建议看一下String.matches看看javaDoc使用这个你可以设置一个检查的函数任何regrex epression的输入并返回true或false,如果这不是你想要的我害怕我不理解这个问题