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 :

Petit probleme swing et creation dynamique de JPanel


Sujet :

AWT/Swing Java

  1. #1
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut Petit probleme swing et creation dynamique de JPanel
    J'ai une petit probleme et je ne comprends pas pourquoi ca marche pas

    Voici mon code :
    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
     
    int keycount = 0;
     
    		try {
    			keycount = Integer.parseInt(this.jtfKeyCount.getText());
    		} catch (NumberFormatException e) {
    			// If an error occure, keycount stay to 0
    			System.out.println("error");
    		}
     
    		System.out.println(keycount);
    		GBC gbc;
    		this.keyPanes = new KeyPane[keycount];
    		for (int i = 0; i < keycount; i++) {
    			System.out.println("pane : " + i);
    			gbc = new GBC(0, i, 1, 1).setInsets(0, 0, 0, 0);
    			gbc.setMode(GBC.HORIZONTAL, GBC.HORIZONTAL, GBC.CENTER);
    			this.keyPanes[i] = new KeyPane();
    			this.jpKeys.add(this.keyPanes[i], gbc);
    		}
    Ceci est le code que j'ai placé dans la methode FocusLost de mon composant (lui meme derivant de JPanel) de maniere a ce qu'il s'execute lorsque un des edits pert le focus.

    Je ne comprends pas pourquoi ce code ne genere pas (graphiquement parlant) mes panels .... bien que les System.out montrent bien qu'il effectue toutes les iterations.

    Note : GBC est uen classe a moi derivant de GridBagConstraints et implementant certaines methodes de simplification.
    SetMode permet de definir les poids pour un "stretch" horizontal, vertical ou les deux.
    Le 2e parametre defini le fill, et le 3e les anchors.
    Cet objet fonctionne.

    en fait si je cree ces composant lors de l'initialisation ca passe mais pas dans l'event.

  2. #2
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Trouvé
    J'avais tout fait : Repaint, updateGraphics, .... sauf lui

  3. #3
    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,

    Je parie que si tu redimensionnes la fenêtre tes composants apparaitront !


    C'est tout à fait normal !


    Je m'explique : en fait juste avant d'être affiché le composant est validé (et du coup tous ses sous-composants). Cette étape consiste à calculer sa taille et sa position selon divers critères (le layout manager, les composants qu'il contient et les composants voisins...).


    Du coup si tu ajoutes des composants par la suite il faut revalider le composant, sinon les nouveaux composants n'apparaissent pas...

    Pour cela tu as 3 méthodes utiles :

    • invalidate() qui permet de marquer le composant comme invalide. Tu n'a pas besoin d'appeler cette méthode car c'est fait implicitement par le add(), mais elle peut-être utile pour un composant personnalisé qui serait modifié par autre chose que add().
    • validate() qui effectue réellement la validation du composant. Comme cette méthode est assez "longue" il ne faut l'appeler que lorsqu'on a finit les modifs (à la fin des ajouts dans ton cas et non pas après chaque ajout).
    • Enfin pour les composants Swing tu as revalidate(), qui se contente de reporté la validation du composant pour les regrouper. Il est préférable de priviliégier cette méthode qui permet d'éviter de revalider plusieurs fois le même composant lorsque plusieurs composant de l'arborescence sont modifié.




    Bref pour faire court : lorsque on ajoute/supprime des composants ou qu'on modifie le layout (taille/position/etc.), il faut revalider le composant :
    • Directement avec validate() pour les composants AWT.
    • De préférence avec revalidate() pour les composants Swing.



    a++


    [edit] Je n'avais pas vu ton second post : updateUI() met à jours les informations concernant le style et risque d'être un peu plus lourd inutilement

  4. #4
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    ok merci
    C'est exactement ce que je cherchais
    je sentais bien que ca pouvais venir de la
    faut dire que Delphi m'a habituer a automatiser tout ca

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

Discussions similaires

  1. Petit probleme Swing
    Par Clorish dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 28/03/2008, 10h04
  2. Réponses: 8
    Dernier message: 13/08/2007, 09h12
  3. Réponses: 4
    Dernier message: 13/10/2006, 03h42
  4. probleme avec la creation dynamique d'un WebBrowser
    Par Jayceblaster dans le forum Delphi
    Réponses: 2
    Dernier message: 30/07/2006, 23h44
  5. Probleme [SWING]: JPanel dans JscrollPane
    Par malandro dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 24/05/2006, 21h02

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