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

Agents de placement/Fenêtres Java Discussion :

problème de rafraichissement repaint()


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Par défaut problème de rafraichissement repaint()
    Bonjour,

    Voici mon probleme :

    J'ai une Jframe qui contient un panel : panel1

    ce panel1 utilise le gestionnaire borderLayout

    J'ajoute au centre de panel1 un panel : panCenter

    ce panCenter utilise le gestionnaire CardLayout :

    ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    	this.listeTexte = new liste(lp,this,this.HeaderTexte);
    	this.listeVideo = new liste(lp,this,this.HeaderVideo);
    	this.listeAudio = new liste(lp,this,this.HeaderAudio);
     
    this.panCenter.setLayout(cardL);
     
       this.panCenter.add(listeVideo,"video");  
       this.panCenter.add(listeTexte,"texte"); 
       this.panCenter.add(listeAudio,"audio");
    la liste extends Jpanel et utilise le gestionnaire Borderlayout :

    j'ajoute donc au centre un panel : panCenter2 ,

    Dans ce panCenter2 j'ajoute des panel qui contiennent une image et un titre contenu dans une arrayList passé en paramètre de liste :

    Voici une partie du code de la classe liste
    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
    45
    46
    47
    48
    49
     
    public class liste extends JPanel implements FocusListener, MouseListener {
     
    public liste(panelListener pl, PanelFichiers f, List<header> header) {
     
    this.listener = pl;
    this.panel = f;
     
    BorderLayout b= new BorderLayout();
    this.setLayout(b);
     
    this.panCenter = new JPanel();
     
    FlowLayout flow = new FlowLayout(FlowLayout.LEFT);
    panCenter.setLayout(flow);
     
    this.add(panCenter, BorderLayout.CENTER);
     
    this.allHeader = header;
     
    maj(allHeader);
    repaint();
     
    }
     
    public void maj(List<header> headers) {
     
    		for (int i = 0; i < headers.size(); i++) {
    			// System.out.println(namefichier[i]);
    			this.t = new JPanel();
    			BoxLayout box = new BoxLayout(t, BoxLayout.Y_AXIS);
     
    			t.setLayout(box);
    			t.setBackground(Color.white);
    			int X = 80;
    			int Y = 80;
    			t.setMaximumSize(new Dimension(X, Y));
    			t.setPreferredSize(new Dimension(X, Y));
    			t.setSize(X, Y);
     
                          this.infoFichier = headers.get(i);
                          String nom = infoFichier.getNom();
                        JLabel titre = new JLabel(nom);
     
                           t.add(titre);
    			t.setAlignmentY(TOP_ALIGNMENT);
     
                             this.panCenter.add(t);
    }
    J'usqu'a la tout va bien, quand je lance mon application j'ai bien un affichage (miniature + titre ) dans des petits panel, qui dépend de l'arraylist.

    Pour avoir la possibilité de d'afficher dans un autre autre ordre je retri la liste dans une methode et je rappelle maj(liste trié) : avec la "nouvelle" arrayliste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void triNom() {
     
    		this.panCenter.removeAll();
     
    		Collections.sort(this.allHeader, new triNom("nom"));
     
    		maj(allHeader);
     
     
    		repaint();
     
    	}
    Les panels avec l'image et le titre ne s'affiche plus : je pense que c'est un probleme de repaint car des que je resize la frame , il apparaissent et dans le bon ordre !!

    Ou faut-ils mettent les repaint() ??

    Merci de votre aide

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    C'est une très mauvaise technique que de reconstruire l'interface graphique à chaque fois. Tu dois conserver les composants visuels et modifier leurs données internes. Les composants seront construits une fois pour toute et tu n'auras pas ce genre de problème
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Par défaut
    Les composants visuel à ré afficher sont les panels créés dynamiquement :

    Nombre panels = liste.size();

    Et chaque panels contient 2 Jlabel (image,titre) .

    Je ne sais pas quoi faire

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Par défaut
    C'est bon ça marche avec UpdateUI() .

    Quelle est la différence entre repaint() et UpdateUI() ??

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    UpdateUI c'est vachement plus lourd.
    D'ailleurs en moins lourd pour faire ce que tu veux tu as la méthode revalidate qui indique que l'interface affichée n'est plus à jour à java qui gère le truc au mieux par la suite. UpdateUI c'est demander à java de brutalement reconstruire toute l'arborescence du composant.

    Repaint ne relance que le paintComponent, par la regénération du layout et de l'arbre de composants internes. Donc c'est vachement plus léger par essence, mais ce n'est pas indiqué lorsque l'on ajoute/retire des composants fils.

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

Discussions similaires

  1. [MFC] Problème de rafraichissement,
    Par pykoon dans le forum MFC
    Réponses: 1
    Dernier message: 27/04/2005, 07h21
  2. Problème de rafraichissement.
    Par beyo dans le forum ASP
    Réponses: 5
    Dernier message: 18/03/2005, 16h27
  3. [SWING] Problème de rafraichissement
    Par david71 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 24/05/2004, 15h38
  4. [JTree]problème de rafraichissement
    Par peppena dans le forum Composants
    Réponses: 9
    Dernier message: 20/01/2004, 14h06
  5. Toujours un problème de rafraichissement de DBGrid
    Par tripper.dim dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/12/2002, 13h15

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