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 :

Positionner des jlabel dans un jpanel


Sujet :

AWT/Swing Java

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    etudiant
    Inscrit en
    Mars 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : etudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 38
    Points : 33
    Points
    33
    Par défaut Positionner des jlabel dans un jpanel
    Bonjour,

    Je développe une petite application sur java, mon problème est le suivant :
    je veux que lorsque je clique sur le jpanel de mon jframe, il m'insère un label avec une photo d'un arbre.
    au début j'ai crée 40 labels et j'ai commencé à jouer sur la position avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jlablel.setlocation(x,y)
    mais lorsque je voulu créer un nouveau jlabel a chaque nouveau clic, ça n'a pas marché il ne m'affiche rien.

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tout d'abord, par défaut, les conteneurs SWING (comme le JPanel par exemple) gère positionnement et dimensionnement de leur contenu (les composants qu'on y met), par l'intermédiaire d'un layout manager. Un JPanel a un FlowLayout par défaut, par exemple. Tu auras beau appeler setLocation, ça n'y changera rien. On peut supprimer le layout manager, et tout gérer soi-même, mais ça fait des composants très figé, non réactifs au changement de dimension de la fenêtre par exemple, plus difficile à insérer dans JScrollPane, etc... Il est préférable de l'éviter.

    Ensuite, je ne comprends pas : tu parles d'un côté de 40 JLabels créés dès le départ, puis d'autre part de créer un JLabel à chaque clic sur le bouton. Ils sont créés d'avance et tu ne fais que les ajouter au JPanel, c'est ça ? En tout cas, lorsqu'on ajoute un composant à un conteneur déjà affiché (et layouté), il est nécessaire de reforcer le layout et souvent le redessin, ce qu'on fait par l'appel successifs de revalidate() et repaint() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void ajouterUnComposant(Container container, Component component, Object constraint) {
       container.add(component, constraint);
       component.revalidate();
       container.repaint();
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    etudiant
    Inscrit en
    Mars 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : etudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    merci pour votre réponse,
    Ma première solution était de créer un bon nombre de jlabel au départ après je leur change de position, mais ce n'est pas une bonne solution, du coup j'ai pensé à créer un jlabel à chaque clic
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private void jPanel3MouseClicked(java.awt.event.MouseEvent evt) {
    JLabel jLabel= new JLabel();
    Point p = evt.getPoint();
    jLabel.setLocation(evt.getX(), evt.getY());
    jLabel.setVisible(true);
    jPanel3.add(jLabel);
    }
    Mais rien ne s'affiche dans mon Jpanel :/

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Déjà, je t'ai dis que le setLocation() ne ferait rien si tu n'as pas enlevé le layout manager (setLayout(null) ou jPanel3 = new JPanel(null); pour le créer), et en plus je t'ai dit de faire revalidate() et repaint().

    Change ton code en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private void jPanel3MouseClicked(java.awt.event.MouseEvent evt) {
       JLabel jLabel= new JLabel();
       Point p = evt.getPoint();
       jLabel.setLocation(evt.getX(), evt.getY()); 
       jPanel3.add(jLabe);
       jPanel3.revalidate();
       jPanel3.repaint();
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    etudiant
    Inscrit en
    Mars 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : etudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    oui j'ai fait comme vous m'avez dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    jPanel3.setlayout(null);
    j'ai tapé le même code que vous m'avez donné mais toujours riien. rien n'est affiché

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Le code tel quel affiche bien un JLabel, mais vide, donc tu ne risques pas de voir grand chose, évidemment. Il faut mettre l'image que tu veux voir dedans.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private void jPanel3MouseClicked(java.awt.event.MouseEvent evt) {
       JLabel jLabel= new JLabel(); 
     
       // ici il faut mettre ton image d'arbre...ou je ne sais quoi...
       jLabel.setIcon( /* une instance d'ImageIcon */ );
     
       Point p = evt.getPoint();
       jLabel.setLocation(evt.getX(), evt.getY()); 
       jPanel3.add(jLabe);
       jPanel3.revalidate();
       jPanel3.repaint();
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/06/2006, 17h00
  2. [ImageMagick] Positionner des intervalles dans un tableau
    Par myomyo dans le forum Bibliothèques et frameworks
    Réponses: 98
    Dernier message: 22/05/2006, 10h48
  3. Déplacer des objets dans un JPanel
    Par hammag dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 23/03/2006, 11h13
  4. [wxPython] positionnement des panel dans fenetre
    Par hysah dans le forum wxPython
    Réponses: 5
    Dernier message: 04/01/2006, 13h39
  5. Positionner des cellules dans une page
    Par BBe8127 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/10/2005, 10h25

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