2017-05-24 1 views
0

(Résolu) Problème 1: J'essaie d'ajouter une vérification simple à mes 2 TextFields en vérifiant ses valeurs. Cependant, avec ce code ci-dessous, je pense que ce qui se passe est que le try/catch est appelé comme le programme démarre (que j'ai testé avec le code System.out.println()), ce qui entraîne toujours une erreur. Comment puis-je faire en sorte que cela ne soit appelé qu'après avoir appuyé sur le bouton 'Finish'?
(UNSOLVED) Numéro 2: Faisant suite à ma première question, comment puis-je faire de telle sorte que ce soit si mon if ou mon try/catch retourne une « erreur », puis en appuyant sur le bouton 'Finish' ne se termine pas le code?Java - Validation de TextField

code:

Dialog<Pair<String, Integer>> dialog = new Dialog(); 
    dialog.setTitle("Add new values"); 
    dialog.setHeaderText("Please input name and number"); 
    ButtonType finishButton = new ButtonType("Finish", ButtonData.OK_DONE); 
    dialog.getDialogPane().getButtonTypes().addAll(finishButton, ButtonType.CANCEL); 
    GridPane grid = new GridPane(); 
    grid.setHgap(10); 
    grid.setVgap(10); 

    TextField name = new TextField(); 
    name.setPromptText("Name"); 
    TextField size = new TextField(); 
    number.setPromptText("Number"); 

    grid.add(new Label("Name:"), 0, 1); 
    grid.add(eventName, 1, 1); 
    grid.add(new Label("Number:"), 0, 3); 
    grid.add(eventSize, 1, 3); 
    dialog.getDialogPane().setContent(grid); 

    //verification code below 
    if (eventName.getText() == null || eventName.getText() == "") { 
     grid.add(new Label("Name is required!"), 0, 0); 
    } 
    try { 
     int size = Integer.parseInt(eventSize.getText()); 
    } catch (NumberFormatException e) { 
     grid.add(new Label("Size is required!"), 0, 1); 
     System.out.println("Test failed"); 
    } 

C'est le code que je suis en train d'apprendre hors de: Here

+0

Avez-vous le code de vérification dans un 'ActionListener '? Si vous l'ajoutez à un 'ActionListener', et ajoutez cela à un bouton, vous devriez être OK. – DCON

+0

En ce moment, j'ai le bouton qui ouvre cette boîte de dialogue pour implémenter 'EventHander ', si c'est ce que vous voulez dire, et vous voulez que je change en ActionListener. Sinon, je n'ai aucune idée de ce que vous voulez dire désolé. – Yuxie

Répondre

1

Tout d'abord, vous devez comparer les chaînes en utilisant la méthode .equals(). Je crois, mais je ne suis pas sûr à 100%, que le chèque pour null est inutile. Alors, changer:

if (eventName.getText() == null || eventName.getText() == "") 

à

if (eventName.getText().equals("")) 

Je ne connais pas la classe Dialog. Cependant, quand j'ai besoin de mettre en œuvre quelque chose comme cela, j'aime utiliser JDialog, et le mettre dans une boucle while:

JPanel p = new JPanel(new GridLayout(2,2)); 
    JTextField nameField = new JTextField(5); 
    JTextField numberField = new JTextField(5); 
    JLabel nameLabel = new JLabel("Name"); 
    JLabel numberLabel = new JLabel("Number"); 

    p.add(nameLabel); 
    p.add(nameField); 
    p.add(numberLabel); 
    p.add(numberField); 

    while(true){ 
     int result = JOptionPane.showConfirmDialog(null, p, "Please enter Name and Number.", JOptionPane.OK_CANCEL_OPTION); 

     if(result == JOptionPane.OK_OPTION){ 
      if(nameField.getText().equals("")){ 
       JOptionPane.showConfirmDialog(null, "Invalid input!"); 
      } 
      else break; 
     } 
    } 

Ce code devrait vous guider sur la façon dont vous pourriez être en mesure de vérifier les différentes entrées et valider les en conséquence. Voir JOptionPane pour plus de détails sur les différentes boîtes de dialogue que vous pouvez ouvrir.

J'espère que cela vous aide.

+0

En ce qui concerne '.equals()', je l'ai essayé et cela ne fonctionne toujours pas. Pour le numéro 2, ce que je veux dire c'est que lorsque vous appuyez sur le bouton dans la boîte de dialogue, il fermera la boîte de dialogue. Je veux qu'il ne se ferme pas si les deux 'TextFields' n'ont pas d'entrée valide. – Yuxie

+0

@Yuxie J'ai édité ma réponse pour plus d'aide. – DCON

0

ne sais pas si cela vous aidera, mais je l'ai fait un bouton qui ressemble à ce que vous essayez de faire

//taking input from pop up box 
JTextField InputPosX = new JTextField(5); 
JTextField InputNegX = new JTextField(5); 
JTextField InputY = new JTextField(5); 
JPanel ChangeAxisPanel = new JPanel(); 
ChangeAxisPanel.add(new JLabel("Max X:")); 
ChangeAxisPanel.add(InputPosX); 
ChangeAxisPanel.add(Box.createHorizontalStrut(15)); // a spacer 
ChangeAxisPanel.add(new JLabel("Min X:")); 
ChangeAxisPanel.add(InputNegX); 
ChangeAxisPanel.add(Box.createHorizontalStrut(15)); // a spacer 
ChangeAxisPanel.add(new JLabel("Y:")); 
ChangeAxisPanel.add(InputY); 


int result = JOptionPane.showConfirmDialog(null, ChangeAxisPanel, 
    "Please Enter X and Y Values", JOptionPane.OK_CANCEL_OPTION); 
    //if ok is pressed 
    if (result == JOptionPane.OK_OPTION) { 

     if(!(InputPosX.getText().isEmpty())){ 

      defaultPosX=Integer.parseInt(InputPosX.getText()); 
     } 
     if(!(InputNegX.getText().isEmpty())){ 

      defaultNegX=Integer.parseInt(InputNegX.getText()); 
     } 
     if(!(InputY.getText().isEmpty())){ 
      defaultY=Integer.parseInt(InputY.getText()); 
     } 
} 
} 
}); 

la plupart de ces ont été recueillies auprès Here son bon lien pour les fenêtres d'entrée graphiques. aussi si vous êtes à la recherche d'une méthode plus simple que vous pouvez regarder en années JButton, vous pouvez l'utiliser pour appeler cette fenêtre

Jbutton

de toute façon l'espoir que cela a aidé

+0

Bien que je n'essayais pas d'utiliser JTextField, votre réponse m'a donné un indice pour résoudre mon premier problème. J'ai dû vérifier les résultats en faisant 'Optionnel > result = dialog.showAndWait(); 'puis vérifie si' result' était présent. Merci! – Yuxie