0

I have a submit button in my program/JFrame it checks for validations and brings up error messages and then another form pops up and has all entered details:

    private void btnSubmitActionPerformed(java.awt.event.ActionEvent evt) {                                          


    //VALIDATIONS-----------------------------------------------------------
    if(txtName.getText().trim().equals(""))
    {
        JOptionPane.showMessageDialog(null, "Must have name");
        jlblNameVer.setVisible(true);

    }
    else 
    {
        jlblNameVer.setVisible(false);
    }

    //ID VERIFICATION
    if (txtIdNumber.getText().trim().equals(""))
   {
        JOptionPane.showMessageDialog(null, "Photo Id must not be emplty");
   }

    //EMAIL VALIDATION
    if(txtEmail==null ||txtEmail.getText().length() < 10|| txtEmail.getText()== null ||!(txtEmail.getText().trim().contains("@") && txtEmail.getText().trim().contains(".")))
    {
         JOptionPane.showMessageDialog(null, "Invalid Email");
     }

    //Phone Number Validation
     if(txtPhoneNum.getText().length() < 10)
    {
        JOptionPane.showMessageDialog(null, "Must atleast 10 characters");
    }

     //COMBOBOX VALIDATIONS
     if(cmbStayDuration.getSelectedIndex() == -1)
    {
        JOptionPane.showMessageDialog(null, "Please select stay duration");
    }

     //Photo ID
      if(cmbPhotoId.getSelectedIndex() == -1)
    {
        JOptionPane.showMessageDialog(null, "Please select Photo ID type");
    }


      //Popup form
       jfrmDetails nf1 = new jfrmDetails();
        jfrmDetails.txtRoomTypef2.setText(this.cmbRoomType.getSelectedItem().toString());
        jfrmDetails.txtRoomNumf2.setText(this.cmbRoomNumber.getSelectedItem().toString());
        jfrmDetails.txtCheckIn.setText(this.ftxtCheckinDate.getText());
        jfrmDetails.txtCheckOut.setText(this.txtCheckOut.getText());
        jfrmDetails.txtName.setText(this.txtName.getText());
        jfrmDetails.txtIdType.setText(this.cmbPhotoId.getSelectedItem().toString());
        jfrmDetails.txtIdNum.setText(this.txtIdNumber.getText());
        jfrmDetails.txtPhoneNum.setText(this.txtPhoneNum.getText());
        jfrmDetails.txtEmail.setText(this.txtEmail.getText());
        nf1.setVisible(true);


}         

The problem is even when these validations are wrong the form will pop up anyway

If any of the validations are incorrect I don't want the popup form to show, what must I do?

Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
JetEli
  • 27
  • 4

1 Answers1

3

You either need to restructure you if blocks into a if-else if-else block, so that last (else) condition would show the new view or use a boolean field which determines if the validation passed or not, for example...

boolean passed = true;
if (txtName.getText().trim().equals("")) {
    JOptionPane.showMessageDialog(null, "Must have name");
    jlblNameVer.setVisible(true);
    passed = false;

} else {
    jlblNameVer.setVisible(false);
}

//ID VERIFICATION
if (txtIdNumber.getText().trim().equals("")) {
    JOptionPane.showMessageDialog(null, "Photo Id must not be emplty");
    passed = false;
}

//EMAIL VALIDATION
if (txtEmail == null || txtEmail.getText().length() < 10 || txtEmail.getText() == null || !(txtEmail.getText().trim().contains("@") && txtEmail.getText().trim().contains("."))) {
    JOptionPane.showMessageDialog(null, "Invalid Email");
    passed = false;
}

//Phone Number Validation
if (txtPhoneNum.getText().length() < 10) {
    JOptionPane.showMessageDialog(null, "Must atleast 10 characters");
    passed = false;
}

//COMBOBOX VALIDATIONS
if (cmbStayDuration.getSelectedIndex() == -1) {
    JOptionPane.showMessageDialog(null, "Please select stay duration");
    passed = false;
}

//Photo ID
if (cmbPhotoId.getSelectedIndex() == -1) {
    JOptionPane.showMessageDialog(null, "Please select Photo ID type");
    passed = false;
}

if (passed) {

    //Popup form
    jfrmDetails nf1 = new jfrmDetails();
    jfrmDetails.txtRoomTypef2.setText(this.cmbRoomType.getSelectedItem().toString());
    jfrmDetails.txtRoomNumf2.setText(this.cmbRoomNumber.getSelectedItem().toString());
    jfrmDetails.txtCheckIn.setText(this.ftxtCheckinDate.getText());
    jfrmDetails.txtCheckOut.setText(this.txtCheckOut.getText());
    jfrmDetails.txtName.setText(this.txtName.getText());
    jfrmDetails.txtIdType.setText(this.cmbPhotoId.getSelectedItem().toString());
    jfrmDetails.txtIdNum.setText(this.txtIdNumber.getText());
    jfrmDetails.txtPhoneNum.setText(this.txtPhoneNum.getText());
    jfrmDetails.txtEmail.setText(this.txtEmail.getText());
    nf1.setVisible(true);

}

or

if (txtName.getText().trim().equals("")) {
    JOptionPane.showMessageDialog(null, "Must have name");
    jlblNameVer.setVisible(true);
} else {
    jlblNameVer.setVisible(false);

    //ID VERIFICATION
    if (txtIdNumber.getText().trim().equals("")) {
        JOptionPane.showMessageDialog(null, "Photo Id must not be emplty");
        passed = false;
    } else if (txtEmail == null || txtEmail.getText().length() < 10 || txtEmail.getText() == null || !(txtEmail.getText().trim().contains("@") && txtEmail.getText().trim().contains("."))) {
        JOptionPane.showMessageDialog(null, "Invalid Email");
        passed = false;
    } else if (txtPhoneNum.getText().length() < 10) {
        JOptionPane.showMessageDialog(null, "Must atleast 10 characters");
        passed = false;
    } else if (cmbStayDuration.getSelectedIndex() == -1) {
        JOptionPane.showMessageDialog(null, "Please select stay duration");
        passed = false;
    } else if (cmbPhotoId.getSelectedIndex() == -1) {
        JOptionPane.showMessageDialog(null, "Please select Photo ID type");
        passed = false;
    } else {

        //Popup form
        jfrmDetails nf1 = new jfrmDetails();
        jfrmDetails.txtRoomTypef2.setText(this.cmbRoomType.getSelectedItem().toString());
        jfrmDetails.txtRoomNumf2.setText(this.cmbRoomNumber.getSelectedItem().toString());
        jfrmDetails.txtCheckIn.setText(this.ftxtCheckinDate.getText());
        jfrmDetails.txtCheckOut.setText(this.txtCheckOut.getText());
        jfrmDetails.txtName.setText(this.txtName.getText());
        jfrmDetails.txtIdType.setText(this.cmbPhotoId.getSelectedItem().toString());
        jfrmDetails.txtIdNum.setText(this.txtIdNumber.getText());
        jfrmDetails.txtPhoneNum.setText(this.txtPhoneNum.getText());
        jfrmDetails.txtEmail.setText(this.txtEmail.getText());
        nf1.setVisible(true);

    }

}

You should also have a look at The Use of Multiple JFrames, Good/Bad Practice? and maybe consider using a CardLayout instead, but this will depend on your underlying needs

You could also have a look at Validating Input, which would allow you to do post validation of your fields when the lose focus

Community
  • 1
  • 1
MadProgrammer
  • 343,457
  • 22
  • 230
  • 366