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 :

Comment raffraichir tous les composants d'un JFrame.


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Points : 109
    Points
    109
    Par défaut Comment raffraichir tous les composants d'un JFrame.
    Bonjour,

    Je cherche actuellement à raffraichir tous les composants de mon application sur commande. En, effet je change la taille de font de tous mes composants et cela ne se fait pas en directe. Pire, il faut cliquer sur un panel pour le forcer à se redessiner, et à l'intérieur de lui même, seulement une partie des composants se rafraichit !!

    Voici la procédure que j'utilise actuellement et j'aurais voulu savoir si vous connaissiez un autre moyen de parcourir tous les éléments. De plus, repaint() seul ne fonction pas, il est nécessaire de faire appel à un revalidate() mais cela ne marche que pour les JComponents, pour le reste, comment faire ?

    Voici mon bout de code qui est appelé lorsque je change la taille de font global de l'application :
    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
    50
    51
    52
    53
    54
     
    private static void changeFont(int size) {
    		if (size < MIN_SIZE_FONT) {
    			size = MIN_SIZE_FONT;
    		}
     
    		displayProperties(size);
    		refreshAllComp(frame);
    	}
     
    	private static void refreshAllComp(Component component) {
    		if (null == component) {
    			return;
    		}
     
    		System.out.println("la classe du composant est "  + component.getClass());
     
    		if (component instanceof JComponent) {
    			System.out.println(" 1 la classe du composant est "  + component.getClass());
    			JComponent comp = (JComponent) component;
     
     
    			if (null != comp.getComponents()) {
    				for (Component c : comp.getComponents()) {
    					refreshAllComp(c);
    				}
    			}						
    			refreshComponent(comp);
    		} else if (component instanceof Container) {
    			System.out.println(" 2 la classe du composant est "  + component.getClass());
    			Container container = (Container) component;
    			if (null != container.getComponents()) {
    				for (Component comp : container.getComponents()) {
    					refreshAllComp(comp);
    				}
    			}
    			refreshComponent(component);
    		}		
     
    	}
     
    	private static void displayProperties(int size) {
    		Enumeration<Object> e = UIManager.getDefaults().keys();
    		while (e.hasMoreElements()) {
    			String key = e.nextElement().toString();
    			if (key.endsWith(".font")) {
    				putFont(key, size);
    			}
    		}
    	}
     
    	private static void putFont(String name, int size) {
    		UIManager.put(name, Font.decode(IFIELD_FONT + size));
    	}

  2. #2
    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
    Bonjour,
    utilise SwingUtilities.updateComponentTreeUI(Component)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Points : 109
    Points
    109
    Par défaut
    Pardon, j'ai oublié de préciser que j'avais déjà utilisé cette méthode et qu'elle ne fonctionna pas.

    En fait, il n'y a que certain élément qui se rafraichissent, c'est très étrange. Je me demande si cela a un rapport avec les layouts utilisés pour stocker les divers composants.

  4. #4
    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
    C'est étrange en effet. Sur quel composant as tu appelé cette méthode ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Points : 109
    Points
    109
    Par défaut
    J'ai un objet DisplayManager dans lequel j'enregiste mon JFrame au démarrage de l'application.

    Puis, dès que je clique sur un bouton pour augmenter toutes les fonts, j'appelle une méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public static void refresh() {
    		if (null != frame) {
    			SwingUtilities.updateComponentTreeUI(frame);
    			frame.repaint();
    		}
    	}

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 140
    Points : 35
    Points
    35
    Par défaut
    updateUI() fonctionne très bien.Essaies.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Points : 109
    Points
    109
    Par défaut
    cette fonction n'existe pas.
    J'ai seulement des labels qui se rafraichisse avec la méthode que je viens de citer.
    Mais tout les labels contenu dans d'autre panel ne le sont pas, à moins que je ne change de fenêtre au sein de mon application et que je reviens dessus... Et encore.

  8. #8
    Membre régulier Avatar de dv-2008
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 240
    Points : 118
    Points
    118
    Par défaut
    je ne sais pas si c'est ce que tu cherches mais en tout cas c'est ce que j'utilise pour rafraichir ma frame

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    frame.update(frame.getGraphics());
    corrigé moi si je me trompe

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Points : 109
    Points
    109
    Par défaut
    Je viens de tester et cela ne fonctionne pas... snif ^^

  10. #10
    Membre régulier Avatar de dv-2008
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 240
    Points : 118
    Points
    118
    Par défaut
    est ce que tu as remplacer frame par l'instance ta Frame

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Points : 109
    Points
    109
    Par défaut
    Oui !

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/04/2008, 12h19
  2. Réponses: 5
    Dernier message: 25/10/2006, 15h13
  3. Réponses: 2
    Dernier message: 06/06/2006, 08h32
  4. Comment lister tous les composants d'une fiche ?
    Par tipiweb dans le forum Langage
    Réponses: 2
    Dernier message: 18/01/2006, 21h53

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