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

AWT/Swing Java Discussion :

Notion validate


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut Notion validate
    Bonsoir,

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    package com.jacquemin.chart;
     
    import java.awt.BorderLayout;
     
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    public class Chart extends JPanel {
    	private JLabel tit = new JLabel();
    	private BorderLayout layout = new BorderLayout();
    	private String position = BorderLayout.NORTH;
     
    	protected Chart() {
    		tit.setText("Title Chart");
    		this.setLayout(layout);
    		this.add(tit, position);
    		this.validate();
    	}
     
    	protected void setTitre(String titre, String position) {
    		if (position.equals(BorderLayout.NORTH)
    				|| position.equals(BorderLayout.SOUTH)
    				|| position.equals(BorderLayout.EAST)
    				|| position.equals(BorderLayout.WEST) && position != this.position) {
    			this.position = position;
    			tit.setText(titre);
    			this.getLayout().removeLayoutComponent(tit);
    			this.add(tit, position);
    			this.validate();
    		}
    	}
     
    	public static void createFrame() throws InterruptedException{
    		javax.swing.JFrame fen = new javax.swing.JFrame();
    		fen.setVisible(true);
    		Chart ch = new Chart();
    		fen.add(ch);
    		//fen.validate();
    		Thread.sleep(1000);
    		ch.setTitre("Nouveau titre",BorderLayout.SOUTH);
    		Thread.sleep(1000);
    		ch.setTitre("Nouveau titre",BorderLayout.NORTH);
    	}
    }
    Voilà mon problème:
    A la construction de ma JFrame je lui ajoute un Chart, ensuite si je fait fen.validate(), le JLabel de mon Chart s'affiche bien c'est bon, maintenant si je fais le validate dans le constructeur de mon Chart, et non dans createFrame avec fen.validat, le JLabel ne s'affiche pas, pourquoi (après lorsque je fais les déplacements du label avec setTitre tout s'affiche correctement...)?

  2. #2
    Membre habitué Avatar de White Rabbit
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 122
    Points : 148
    Points
    148
    Par défaut
    Citation Envoyé par Java 2 Platform API Specification
    The validate method is used to cause a container to lay out its subcomponents again. It should be invoked when this container's subcomponents are modified (added to or removed from the container, or layout-related information changed) after the container has been displayed.
    En français :

    La méthode de validation est utilisée pour forcer un container à replacer ses composants. Elle devrait être appeler aprés que le container est affiché et quand les composants de ce container sont modifiés (ajouter ou enlever du container ou quand le placement des composants a changé)
    Il ne faut pas appeler la méthode que dans le constructeur.

  3. #3
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Citation Envoyé par White Rabbit

    En français :

    La méthode de validation est utilisée pour forcer un container à replacer ses composants. Elle devrait être appeler aprés que le container est affiché et quand les composants de ce container sont modifiés (ajouter ou enlever du container ou quand le placement des composants a changé)
    Il ne faut pas appeler la méthode que dans le constructeur.
    On est d'accord mais entre la création le validate depuis fen (dans le cas où ca marche) aucun composants du container n'est modifié donc je me demande pourquoi si je fais le validate dans le constructeur, rien ne s'affiche

  4. #4
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Personne ne peut m'éclairer?

  5. #5
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par pollux007
    On est d'accord mais entre la création le validate depuis fen (dans le cas où ca marche) aucun composants du container n'est modifié donc je me demande pourquoi si je fais le validate dans le constructeur, rien ne s'affiche
    C'est dans la doc : validate()
    It should be invoked when this container's subcomponents are modified (added to or removed from the container, or layout-related information changed) after the container has been displayed.
    Elle doit être appellé une fois que le composant a été modifié après qu'il soit affiché...


    D'après ton code :
    • Tu crées et tu affiches une fenêtre.
    • Tu crées un panel que tu ajoutes à ta fenêtre


    Logiquement dans le constructeur de ton Panel, il n'est pas affiché puisqu'il n'a pas encore été ajouté dans une fenêtre, donc validate ne fait rien...

    Ensuite comme tu ajoutes ce panel dans une fenêtre déjà visible, tu dois appeller validate sur cette fenêtre pour que les composant soit replacés correctement...


    Conseil :
    • Crées d'abord tous les composants de ta fenêtre avant de l'afficher, cela permet d'éviter de s'embrouiller avec les validate().
    • Et je te rappelle qu'une fois que tes composants sont affichés, il faut toujours les modifier depuis le thread EDT, donc soit depuis les méthodes des listeners, soit en utilisant SwingUtilities.invokeLater() et/ou SwingUtilities.invokeAndWait()...


    a++

  6. #6
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Merci pour toutes ces précisions! J'avais bien lu la doc mais comme je vois j'avais mal compris

  7. #7
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Citation Envoyé par adiGuba
    [*]Et je te rappelle qu'une fois que tes composants sont affichés, il faut toujours les modifier depuis le thread EDT
    C'est pour cela qu'il est préférable d'utiliser revalidate()

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

Discussions similaires

  1. validation d'un XML schema
    Par nicolas_jf dans le forum Valider
    Réponses: 2
    Dernier message: 05/05/2003, 11h25
  2. est ce un XSchema Valide?
    Par Slash dans le forum Valider
    Réponses: 4
    Dernier message: 06/03/2003, 14h01
  3. Notion d'algorithme
    Par gtr dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 10/12/2002, 11h46
  4. tester si une date est valide
    Par Andry dans le forum Langage
    Réponses: 5
    Dernier message: 17/09/2002, 11h54
  5. [VB6] Evenement validate
    Par grosjej dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 05/09/2002, 15h46

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