2012-02-23 8 views
1

J'ai cette application de bibliothèque qui a quelques méthodes différentes dans sa classe de contrôleur. L'un d'eux est appelé checkOut qui est utilisé pour extraire les éléments de la bibliothèque. J'essaye de faire cela quand le bouton "checkout" est maintenant pressé et j'espère qu'il peut obtenir toutes les informations nécessaires des champs txt que j'ai créés.Ajout d'une interface graphique à mon application

J'ai fait ce qui suit et il ne fait que sauter avec des erreurs rouges partout quand j'appuie sur "checkout" en cours d'exécution. Toute aide est appréciée, merci!

if (source == checkoutButton) 
    { 
     /*JDialog checkout = new JDialog(checkoutContent, "Checkout", true); 
     JPanel panel = new JPanel(); 
     checkout.setBounds(750, 300, 350, 190); 
     checkout.setResizable(false); 
     checkout.add(panel); 
     checkout.setVisible(true);*/ 

     String borrowerID = userIDTxtField.getText(); 
     String code = itemIDField.getText(); 
     String date = dateField.getText(); 
     String copyString = code.substring(1); 
     int copy=Integer.valueOf(copyString); 

if (ctrl.checkBorrower(borrowerID)) 
      { 

     boolean valid = false; 
     SimpleDateFormat sdf1= new SimpleDateFormat("M/dd/yyyy"); 
     sdf1.setLenient(false); 

        while (!valid) 
        { 

        try 
        { 
         sdf1.parse(date); 
         catalogArea.setText(ctrl.checkOut(borrowerID, code, copy, date)); 
         valid = true; 

        } 
        catch (Exception e) 
        { 
         catalogArea.setText("Date is not valid. Please try again."); 
         continue; 
        } 

        } 
      } 
      else 
      { 
       catalogArea.setText("Sorry Invalid ID"); 
      } 

    } 
+0

Quelle est l'erreur? –

+0

* "exploser avec des erreurs rouges partout" * Cela doit être très joli. :) –

+1

Pour une meilleure aide plus tôt, postez un [SSCCE] (http://sscce.org/). Si j'avais un SSCCE, il n'y aurait aucune raison de «présumer» ou de «deviner» - quelque chose que je ne suis pas particulièrement bon. ;) –

Répondre

4
while (!valid) 
{ 
try 
{ 
    sdf1.parse(date); 
    catalogArea.setText(ctrl.checkOut(borrowerID, code, copy, date)); 
    valid = true; 
} 
catch (Exception e) 
{ 
    catalogArea.setText("Date is not valid. Please try again."); 
    continue; 
} 
} 

Ce code PROVOQUERONT si la date est invalide une boucle infinie efficacement. L'interface graphique serait très probablement bloquée (si cela se produit sur l'EDT - si ce n'est pas sur l'EDT, les mises à jour de l'interface graphique sont incorrectes) afin que l'utilisateur ne puisse pas changer la date invalide qui provoque la boucle.


Pour résoudre ce problème, je regarderais le premier code de changement non montré dans la boucle. Fondamentalement, le dateField (vraisemblablement un JTextField), devrait être un JSpinner.

SpinnerDemo

Voir How to Use Spinners dans le tutoriel pour cette capture d'écran, le code de travail, et d'autres conseils.

Si le champ de texte était à la place un spinner, la totalité des shenanigans de validation est rendue redondante. Le spinner fournira une date valide (mais pas nécessairement correcte - User Intelligence API requise).

+1

pour JSpinner +1 – mKorbel

+0

@mKorbel Trop souvent, je lis des questions qui me font penser "Pourquoi utiliser un marteau quand vous avez besoin d'un tournevis?". C'est l'une de ces choses où «le bon outil pour le travail» aidera énormément. :) –

+0

......... et je prends la programmation de l'interface graphique comme partie non acceptée de [Arts visuels] (http://en.wikipedia.org/wiki/Visual_arts) – mKorbel

Questions connexes