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

NetBeans Java Discussion :

JLabel créé dynamiquement n'apparait pas


Sujet :

NetBeans Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 19
    Par défaut JLabel créé dynamiquement n'apparait pas
    Bonjour,
    Je suis nouveau sous java et NetBeans7.3.1.
    J'ai besoin pour une appli, de faire une copie d'un jLabel juste par glisser/deplacer ou au relachement de la souris.
    J'ai aussi créé une classe Objet à qui on pourrait affecter un jLabel.
    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
     
        private void initComponents() {
     
            jLabel1 = new javax.swing.JLabel();
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
     
            jLabel1.setIcon(new javax.swing.ImageIcon(CheminImages + "LedON.png")); // NOI18N
            jLabel1.setText("LED");
            jLabel1.addMouseListener(new java.awt.event.MouseAdapter() {
                public void mouseReleased(java.awt.event.MouseEvent evt) {
                    OnReleased(evt);
                }
            });
     
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(57, 57, 57)
                    .addComponent(jLabel1)
                    .addContainerGap(509, Short.MAX_VALUE))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(65, 65, 65)
                    .addComponent(jLabel1)
                    .addContainerGap(333, Short.MAX_VALUE))
            );
     
            jLabel1.getAccessibleContext().setAccessibleName("LED");
     
            pack();
        }// </editor-fold>                        
     
    /* Methode s'executant au relachement de la souris */
        private void OnReleased(java.awt.event.MouseEvent evt) {                            
            // TODO add your handling code here:
            /* Creation d'un nouvel objet de type LED */
            JLabel jLabel2 = new JLabel("LED1");
            Objet LED1 = new Objet("LED1", CheminImages +"open.png", jLabel2/*new javax.swing.JLabel("LED1")*/);
            LED1.Display(this);
            //this.repaint(); 
            //this.revalidate();
        }
    Ci-apres, le code de ma classe Objet:
    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
     
    public class Objet {
    	/*private*/ String Name;
    	/*private*/ String Path; 
            /*private*/ JLabel Image;
     
        /* constructor */
        public Objet(String Name, String Path, JLabel Image) {
            this.Name = Name;
            this.Path = Path;
            this.Image = Image;
        }
     
        /*
         * 
         */
        public void Init() {
            Image.addMouseMotionListener(new MouseAdapter() {
                public void mouseDragged(MouseEvent e) {
                    //frame.setLayout(null);
                    //Image.setLocation(e.getX(), e.getY());
                }
            });
     
            Image.addMouseListener(new MouseAdapter() {
                public void mouseReleased(java.awt.event.MouseEvent evt) {
                    OnReleased(evt);
                }
     
                private void OnReleased(MouseEvent e) {
                    Image.setLocation(e.getX(), e.getY());
                }
            });
        }
     
        /*
         * 
         */
        public void Display(JFrame frame){
            frame.getContentPane().add(Image, BorderLayout.EAST);
            Image.setIcon(new ImageIcon(Path));         
            Image.setVisible(true);
        }
    }
    Mon probleme, c'est que le jLabel créé dynamiquement ne s'affiche pas lors de l'appel de: Auriez-vous une idée du pourquoi? Merci d'avance

  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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Salut,

    dans ces lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
    tu affectes au contentPane de ta jframe un layout de type GroupLayout

    et dans cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frame.getContentPane().add(Image, BorderLayout.EAST);
    tu utilises une contrainte de placement propre au BorderLayout, qui n'est pas un GroupLayout, il me semble.
    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
    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 : 44
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Juste une remarque : de manière générale, il faut éviter le plus possible d'avoir à modifier l'interface graphique après son initialisation.
    Que cherches-tu à faire réellement, d'un point de vue graphique (ce que verra l'utilisateur) ?
    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.

  4. #4
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 19
    Par défaut
    Merci pour vos réponses.

    Je cherche à créer une interface dans laquelle on aura des JLabels initialisés avec des images. En plus, j'aimerais avoir une sorte d'ecran vide par defaut dans lequel on pourra, apres uin clic sur un jlabel (contenant une image), rajouter un nouveau jLabel(image) sur l'ecran.
    J'aimerais donc utiliser un Panel avec un layout(null) pour l'ecran mais j'arrive pas à trouver un bon tutoriel.

    Des idées?

  5. #5
    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 : 44
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par number8one Voir le message
    J'aimerais donc utiliser un Panel avec un layout(null) pour l'ecran mais j'arrive pas à trouver un bon tutoriel.

    Des idées?
    Le layout(null) n'est quasiment jamais la bonne solution. Tu auras donc beaucoup de mal à trouver un bon tutoriel.
    Je n'ai pas compris tout ce que tu expliques sur le fonctionnement de ton interface : l'écran semble divisé en 2 parties : l'une avec une liste d'images, et l'autre pour afficher une image en particulier (après clic sur une image existante). Mais je n'ai pas compris ou et comment une nouvelle image est créée.
    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.

  6. #6
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 19
    Par défaut
    Salut,
    C'est bien ce que je veux faire.
    La creation de la nouvelle image se fait à travers la creation d'un nouvel objet LED. La methode OnReleased ci-dessous est appelée au relachement de la souris apres un clic sur une image-modèle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        private void OnReleased(java.awt.event.MouseEvent evt) {                            
            // TODO add your handling code here:
            Objet LED = new Objet("LED1",CaracteresPath + "LedON.png", new JLabel("LED1"));
            LED.Init();
            LED.Display(jPanel2, evt.getX(), evt.getY());
        }
    Netbeans genere le jPanel qui me sert d'afficheur avec un GroupLayout, je l'ai redefini en Layout null:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        private void Post_initComponents() {
     
            //Copier les fonctions de initComponents ici, modifier si necessaire
            jPanel2.setLayout(null);
            jPanel2.setBackground(Color.blue);
            jPanel2.setBorder(BorderFactory.createLineBorder(Color.black)); 
            jPanel2.setBounds(130, 20, 400, 220); // set the location of the JPanel
            getContentPane().add(jPanel2);
        }
    Ci-dessous ma classe Display:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        public void Display(JPanel panel, int PosX, int PosY){
            //Insets PanelInsets = panel.getInsets(); //Bordure du panel
            //javax.swing.JOptionPane.showMessageDialog(null,String.valueOf(panel.getX())); 
     
            Image.setIcon(new ImageIcon(Path));   
            Image.setBounds(PosX-panel.getX(), PosY-panel.getY(), Image.getIcon().getIconWidth(), Image.getIcon().getIconHeight()); //posX,posY,sizeX,sizeY
            panel.add(Image); 
            panel.revalidate();
            panel.repaint();
        }
    Ca fonctionne sauf que j'ai des soucis de positionnement maintenant. Cela doit etre du au Layout(null) ou à des offsets à gerer. Je regarde et je vous fais signe.
    Merci pour votre aide

Discussions similaires

  1. [vb.net] [design mode] le form n'apparait pas en mode design
    Par graphicsxp dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/08/2005, 13h10
  2. ma popup n'apparait pas !
    Par zorba49 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/07/2005, 11h22
  3. [debutant] Window n'apparait pas!
    Par JulienDuSud dans le forum Windows
    Réponses: 20
    Dernier message: 01/12/2004, 17h17
  4. [Q] que faire quand un plugin n'apparait pas dans eclipse
    Par zolive dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 30/08/2004, 23h38
  5. Réponses: 4
    Dernier message: 15/01/2004, 22h53

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