2010-10-12 6 views
0

Celui-ci me dérange depuis quelques jours maintenant et je pense que j'ai à peine pu le réduire. J'utilise Java et j'ai un assistant pour que l'utilisateur puisse y accéder. L'une des étapes permet à l'utilisateur de sélectionner une date de début & et une date de fin & date pour planifier un travail. Je pensais que j'avais la validation sur les dates complètes (de sorte que la date de fin doit être après la date de début & date de début doit être après la date actuelle, etc). Cependant, ma méthode de validation ne s'est déclenchée qu'une fois que la mise au point a été perdue sur les deux date TextField, donc si l'utilisateur a sélectionné une nouvelle date et immédiatement cliqué sur suivant, un choix invalide pourrait continuer - bug! Les sélecteurs de date de début et de fin sont des widgets constitués d'un JSpinner et d'une boîte de dialogue de calendrier qui apparaît lorsque le bouton est cliqué. Je joins un document Listener au champ de texte de la JSpinner:Document Auditeur tirant quelques fois mais pas d'autres

DocumentListener docListener = new DocumentListener() { 

     @Override 
     public void insertUpdate(DocumentEvent e) { 
      dateChanged(); 

      System.out.println("insertUpdate"); 

     } 

     @Override 
     public void removeUpdate(DocumentEvent e) { 
      dateChanged(); 
      System.out.println("removeUpdate"); 
     } 

     @Override 
     public void changedUpdate(DocumentEvent e) { 
      dateChanged(); 
      System.out.println("changedUpdate"); 
     } 

    }; 
    ((JSpinner.DefaultEditor) jSpinner1.getEditor()).getTextField().getDocument().addDocumentListener(
      docListener); 

Quand je lance cette classe en utilisant sa propre méthode principale pour tester:

public static void main(String[] args) { 

    DateSelectorWidget test = new DateSelectorWidget(); 
    JFrame f = new JFrame("T E S T "); 
    f.getContentPane().setLayout(new BorderLayout()); 
    f.getContentPane().add(test, BorderLayout.CENTER); 
    f.pack(); 
    f.setVisible(true); 

} 

Le DocListener se déclenche chaque fois et tout va bien . Cependant, cette classe fait partie d'un programme plus vaste et quand elle est appelée, le DocListener ne tire tout simplement pas du tout. Une instance de la classe est simplement ajoutée à un panneau dans l'assistant et pourtant, elle ne fonctionne pas comme elle le fait lorsqu'elle est testée indépendamment.

Vous avez des idées?

Merci

+0

(Note: 'changedUpdate' ne veut pas dire ce que vous pensez que cela signifie.) –

Répondre

1

Je pense que vous modifiez directement ou indirectement l'éditeur sur le JSpinner après votre ligne pour récupérer, fonte, obtenez le composant, le modèle et obtenez ajouter auditeur.

+0

Je suis sur le point de commencer à enquêter sur tout ce qui pourrait affecter l'éditeur tout au long, comme vous le suggérez. Merci – Frank

Questions connexes