IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

getComponents non fonctionnelle


Sujet :

Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Octobre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 122
    Par défaut getComponents non fonctionnelle
    Cette boucle devrait parcourire tout les composants d'un JInternalFrame,
    puis modifier le contenu (text) après avoir trouvé le composant via son nom.

    Lors de l'execution du code, aucun des controls sont mis à jour avec les nouvelles données.

    J'attend vos suggestions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    private void findControl(String name, String text){
     
    	//label1.setText("r");
     
    	for (Component composant : getCreateClient().getComponents()) {
    		label1.setText("r");
    		composant.setEnabled(false);
     
    		if (composant.getName() != null) {
     
    			if (composant.getName() == name.trim()) {
    				System.out.println(composant.getName());
     
    				if (composant instanceof JFormattedTextField) {
    					System.out.println(text.trim());	
     
    					((JFormattedTextField) composant).setText(text);
    				}
    					break;
    			}
    		}
    	}
    }

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu appelles getComponents() sur quoi précisément ? Tu as loggués les composants retournée pour voir ?

    a++

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Octobre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 122
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    Tu appelles getComponents() sur quoi précisément ? Tu as loggués les composants retournée pour voir ?

    a++
    J'appel la méthode du JPanel (conteneur). Pour y lire les objets, afin de les manipuler.

    AdiGuba, aurais tu une solution ?

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    composant.getName() == name.trim()
    On ne test jamais l'égalité de deux strings comme ça. Il y a une différence fondamentale entre
    string1 == string2
    et
    string1.equals(string2)

    !!!

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Et ? Cela te retournes quels composants exactement ?

    a++

    [edit] Bien vu tchize_

  6. #6
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Octobre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 122
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    composant.getName() == name.trim()
    On ne test jamais l'égalité de deux strings comme ça. Il y a une différence fondamentale entre
    string1 == string2
    et
    string1.equals(string2)

    !!!
    Le première compare des valeurs dite primitives et le second compare les valeurs renvoyé par la méthode toString de l'instance indiquée. non

    Composant.getName => String
    name.trim() => String en supprimant les espaces des deux côtés.

    Voici après modification :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    for (Component composant : getCreateClient().getComponents()) {
    			label1.setText("r");
    			composant.setEnabled(false);
     
    			if (!composant.getName().equals(null)) {
     
    				if (composant.getName().equals(name)) {
    					System.out.println(composant.getName());
     
    					if (composant instanceof JFormattedTextField) {
    						System.out.println(text.trim());	
     
    						((JFormattedTextField) composant).setText(text);
    					}
     
    					break;
    				}
    les erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    java.lang.NullPointerException
    	at view.frmPatient.findControl(frmPatient.java:278)
    	at view.frmPatient.RemplireFiche(frmPatient.java:249)
    	at view.frmPatient.update(frmPatient.java:300)
    	at java.util.Observable.notifyObservers(Unknown Source)
    	at model.Facade.setCurrentPatient(Facade.java:39)
    	at controller.FieldFocusListener.focusLost(FieldFocusListener.java:32)
    	at java.awt.AWTEventMulticaster.focusLost(Unknown Source)
    	at java.awt.Component.processFocusEvent(Unknown Source)
    	at javax.swing.JFormattedTextField.processFocusEvent(Unknown Source)
    	at java.awt.Component.processEvent(Unknown Source)
    	at java.awt.Container.processEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
    	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
    	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par SpeedOverflow Voir le message
    Le première compare des valeurs dite primitives et le second compare les valeurs renvoyé par la méthode toString de l'instance indiquée. non
    Non, la premier compare les instance, la deuxième les valeurs. En l'occurrence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String s1 = new String("1234");
    String s2 = new String(s1);
    s1==s2; // false
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    			if (!composant.getName().equals(null)) {
    C'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!composant.getName()==null)

  8. #8
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Octobre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 122
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Non, la premier compare les instance, la deuxième les valeurs. En l'occurrence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String s1 = new String("1234");
    String s2 = new String(s1);
    s1==s2; // false

    C'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!composant.getName()==null)
    Le mystère reste entier !

    Biensure, on compare leurs références en memoire et du faite qu'ils ne sont pas aux même endroit ils sont inégals.

    malgré cela, j'ai changé la première condition.

    ils n'effectue pas l'assignation

    pourquoiiiiiiiiiiiiiiiiiiii !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (composant instanceof JFormattedTextField) {
    System.out.println(text.trim());	
    ((JFormattedTextField) composant).setText(text);
    }

  9. #9
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Le fait d'appeler getComponents montre directement qu'il y a un problème d'architecture.

    En effet si tu as besoin d'utiliser des composant spécifiques, tu devrais plutôt conserver des références dessus.

    Utiliser getComponents pour retrouver un composant, c'est juste über crade comme façon de faire.

  10. #10
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Octobre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 122
    Par défaut
    Citation Envoyé par sinok Voir le message
    Le fait d'appeler getComponents montre directement qu'il y a un problème d'architecture.

    En effet si tu as besoin d'utiliser des composant spécifiques, tu devrais plutôt conserver des références dessus.

    Utiliser getComponents pour retrouver un composant, c'est juste über crade comme façon de faire.
    , Donne moi une façon plus simple de desactive toutes ou parties des controls présents sur un formulaire.

    ou encore de changé d'autres propriétés

    en un minimun de lignes.

  11. #11
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    je suis d'accord, getComponents est aussi là pour servir. Pour trouver 1 composant -> on le garde en attribut. Pour faire un traitement généric (genre passer tout ls chamsp en lecture seul), un scan me semble raisonnable.


    Maintenant, affiche chaque composnat que tu teste pour voir son nom et son type, ca te donnera une idée de quoi tu scanne. Aussi, getComponents n'est pas récursif, si t'a utilisé des panel poru aranger ton layout, tu devra aller voir dans ces sous panneaux!

  12. #12
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Octobre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 122
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    je suis d'accord, getComponents est aussi là pour servir. Pour trouver 1 composant -> on le garde en attribut. Pour faire un traitement généric (genre passer tout ls chamsp en lecture seul), un scan me semble raisonnable.


    Maintenant, affiche chaque composnat que tu teste pour voir son nom et son type, ca te donnera une idée de quoi tu scanne. Aussi, getComponents n'est pas récursif, si t'a utilisé des panel poru aranger ton layout, tu devra aller voir dans ces sous panneaux!
    Voici le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (composant instanceof JFormattedTextField) {
    						System.out.println(text.trim());	
    						System.out.println("Name : " + composant.getName() + " CN : " + composant.getClass().getCanonicalName());
     
    						((JFormattedTextField) composant).setText(text);
    					}
    la console :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    PatientExistant
    Nom
    Bruggeman
    Name : Nom CN : javax.swing.JFormattedTextField
    Prenom
    Raphaël
    Name : Prenom CN : javax.swing.JFormattedTextField
    Adresse
    XXXXXXXXXXXXXXXX
    Name : Adresse CN : javax.swing.JFormattedTextField
    eMail
    bruggeman.raphael@hotmail.com
    Name : eMail CN : javax.swing.JFormattedTextField
    Conjoint
    XXXXXXXXXX
    Name : Conjoint CN : javax.swing.JFormattedTextField

  13. #13
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    je pense qu'il effectue bien l'assignation, mais que tu scanne des composant qui ne sont pas ceux affiché à l'écran. Fait des getText() pour t'en convaincre. Je suppose que getCreateClient() renvoie une instance différente...

  14. #14
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Octobre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 122
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    je pense qu'il effectue bien l'assignation, mais que tu scanne des composant qui ne sont pas ceux affiché à l'écran. Fait des getText() pour t'en convaincre. Je suppose que getCreateClient() renvoie une instance différente...
    Effectivement, je créai une seconde instance à l'appel de la méthode getCreateClient() .

    En très grand merci, tchize.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Flash Disque non fonctionnel
    Par stanley dans le forum Composants
    Réponses: 2
    Dernier message: 18/07/2006, 12h18
  2. Code non fonctionnel sous IE
    Par Nip dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/06/2006, 14h59
  3. timage non fonctionnel !!
    Par micky13 dans le forum Delphi
    Réponses: 5
    Dernier message: 13/05/2006, 07h21
  4. Update non fonctionnel
    Par kissmytoe dans le forum Access
    Réponses: 7
    Dernier message: 07/03/2006, 18h37
  5. [REPORTS] Order BY non fonctionnel
    Par sdiack dans le forum Reports
    Réponses: 2
    Dernier message: 10/02/2006, 18h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo