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 :

Pas d'affichage avec un JLayeredPane


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 160
    Par défaut Pas d'affichage avec un JLayeredPane
    Bonjour à tous,

    J'ai essayé d'afficher une simple image en utilisant un JLayeredPane mais je n'ai rien qui s'affiche( j'ai une JFrame vide). ça marche bien en récupérant le container par defaut de la JFrame (getContentPane) mais pas avec le LayeredPane. Aurais-je oublié quelque chose ?

    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
     
    public static void main(String[] args) {
    		JFrame frame = new JFrame ("Test de superposition");
    		JLayeredPane lp = frame.getLayeredPane();
    		JPanel p1 = new JPanel();
    		ImageIcon ic = new ImageIcon ("D:/Mes documents/ENIC/PST/clips CPR/vidcap2/vlcsnap-828756.jpg");
    		JLabel l = new JLabel (ic);
     
    		p1.add(l);
    		lp.add(p1,1);
     
    		frame.setSize(700,500);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setVisible(true);
    	}

  2. #2
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Un layered pane n'a pas de layout, il faut faire un setBounds() sur le composant que tu ajoutes dedans (et au passage, assure-toi que tu mets ce composant sur le bon layer...).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 160
    Par défaut
    OK, ça marche merci ! (mais il fallait le savoir )

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 160
    Par défaut
    ... J'ai parlé trop vite...

    Avec 1 composant ça marche mais pas avec 2 !
    En effet, j'arrive bien à afficher l'image mais lorsque que je veux superposer dessus un simple rectangle (redéfinition de la méthode paint du JComponent), ce dernier ne s'affiche pas malgré le fait que j'ai refais un setBounds() sur ce component et que lors de l'ajout au layeredPane je lui ai donné un numéro supérieur à celui de l'image.

    Ce qui est bizarre, c'est quand je fais un test avec 2 rectangle, ça marche.
    En fait, quand je fais un setVisible (false) sur mon image, le rectangle apparait. Cela laisse penser que ben qu'ayant un numéro plus faible, l'image s'affiche quand même en premier plan. A quoi cela est-il du ?

    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
    	public void paint(Graphics g) {
    		// TODO Auto-generated method stub
    		g.setColor(Color.red);
    		g.drawRect(50, 50, 100, 50);
     
    	}
     
    	public static void main(String[] args) {
    		JFrame frame = new JFrame ("Test de superposition");
    		JLayeredPane lp = frame.getLayeredPane();
    		JPanel p1 = new JPanel();
    		ImageIcon ic = new ImageIcon ("D:/Mes documents/ENIC/PST/clips CPR/vidcap2/vlcsnap-828756.jpg");
    		JLabel l = new JLabel (ic);
    		p1.setBounds(0, 0, 640, 480);
    		Test2 comp = new Test2 (); //Test2 hérite de JComponent
    		comp.setBounds(0, 0, 640, 480);
     
    		p1.add(l);
    		lp.add(p1,1);
    		lp.add(comp,2);
     
    		p1.setVisible(true); //Quand on met à false, le rectangle apparait !
    		frame.setSize(700,550);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setVisible(true);
    	}
    Note : Si j'ajoute dans le LayeredPane le rectangle en premier alors celui-ci s'affiche bien au dessus de l'image. J'ai l'impression que les numéros pour définir la place des composants ne fonctionnent pas (à moins que je ne sache pas m'en servir )

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut
    quanq tu redéfinies paint tu doit faire au debut super.paint(). De plus il vaut mieux redefinir paintComponent mais je ne sais plus exactement pourquoi (le paint appel lui même le paintComponent idem pour le repaint mais mes souvenirs sont vague la dessus donc à ne pas prendre au pieds de la lettre et à verifier).

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 160
    Par défaut
    Mais en fait c'est pas que mon rectangle ne s'affiche pas, c'est plutôt qu'il n'est pas sur la bonne couche de mon LayeredPane.
    Si je l'ajoute en 2 ème alors quelque soit le numéro que je vais indiquer, il sera toujours derière l'image. Tandis que si je l'ajoute en premier alors il sera toujours au premier plan quelque soit encore le "numéro de couche" indiqué.

    Dans mon cas c'est pas forcement gênant car je ne compte pas changer mes composants de couche mais bon pour le principe j'aimerais savoir pourquoi ça ne marche pas.

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

Discussions similaires

  1. pas d'affichage avec opengl glut
    Par mar1985 dans le forum OpenGL
    Réponses: 1
    Dernier message: 25/03/2014, 08h45
  2. Pas d'affichage avec l'appel des pages par include
    Par jlb59 dans le forum Langage
    Réponses: 4
    Dernier message: 22/05/2011, 13h33
  3. pas d'affichage avec openGL
    Par momo l'plus bô dans le forum OpenGL
    Réponses: 2
    Dernier message: 07/05/2011, 10h12
  4. Réponses: 3
    Dernier message: 12/06/2010, 10h16
  5. Pas d'affichage avec les VBO
    Par GLDavid dans le forum OpenGL
    Réponses: 2
    Dernier message: 15/06/2009, 16h55

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