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

Composants Java Discussion :

JLayeredPane et JPanel


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 14
    Par défaut JLayeredPane et JPanel
    Bonjour,

    Je suis en train de programmer un "jeu de football". En gros, des joueurs se déplacent sur un terrain de manière plus ou moins aléatoire.
    Le problème que j'ai est qu'à chaque fois qu'un joueur change de position, l'ensemble du terrain et des joueurs est redessiné, ce qui entraine un scintillement désagréable à la vue (en plus de n'être pas optimisé).
    Pour remédier à ça, j'ai voulu utiliser un JLayeredPane qui contient 2 JPanel, un pour le terrain et un pour les joueurs (pour commencer).
    Néanmoins, impossible de réussir à afficher le terrain en dessous des joueurs.

    Voilà 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
    21
    22
    23
    24
     
    Image imgStade, imgJoueurs;
            JLayeredPane jlpEnsemble;
            JPanel jpStade, jpJoueurs;
     
            jpStade = new JPanel();
            jpStade.setBounds(0, 0, 800, 400);
            jpJoueurs = new JPanel();
            jpJoueurs.setBounds(0, 0, 800, 400);
            jlpEnsemble = new JLayeredPane();
            jlpEnsemble.setPreferredSize(new Dimension(800, 400));        
            jlpEnsemble.add(jpJoueurs, new Integer(1));
            jlpEnsemble.add(jpStade, new Integer(2));
            this.getContentPane().add(jlpEnsemble);
            pack();
            this.setVisible(true);
     
            Dimension dim = jpStade.getSize();
            imgStade = jpStade.createImage(dim.width, dim.height);
            Graphics g = imgStade.getGraphics();
            g.setColor(Color.green);
            g.fillRect(0, 0, dim.width, dim.height); // Dessin du stade
            Dimension dim2 = jpJoueurs.getSize();
            imgJoueurs = jpJoueurs.createImage(dim2.width, dim2.height); // Image qui servira à dessiner les joueurs par la suite
    Auriez vous une idée de l'origine du problème ?

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    J'aurais plus tendance à utiliser un seul et même composant pour tout le dessin.

    Puis gérer tout ce qui est déplacement via la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    repaint(x,y,width,height)
    Pour cela il faut que le code de ton composant se base sur la zone de clip des graphics fournis en paramètre de la méthode paintComponent, zone de clip correspondant au paramètres de la version de la méthode repaint précitée.

    De fait tu peux effectuer plusieurs repaint à la file, Swing les agrègera automatiquement avant le prochain appel a paintComponent.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 14
    Par défaut
    Le problème c'est que je souhaite tracer des lignes sur mon stade, et il serait donc trop laborieux de vérifier à chaque repaint si le joueur était sur une ligne et le cas échéant de la repeindre.
    Puis je ne comprend pas cette phrase : "Pour cela il faut que le code de ton composant se base sur la zone de clip des graphics fournis en paramètre de la méthode paintComponent, zone de clip correspondant au paramètres de la version de la méthode repaint précitée."

  4. #4
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Salut,
    l'utilisation de couches avec un JLayred me semble pas un bon choix,
    sinon, concernant ta question,

    Citation Envoyé par darkgloom Voir le message
    Néanmoins, impossible de réussir à afficher le terrain en dessous des joueurs.
    les deux panneaux sont bien superposés

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    jpStade.setBounds(0, 0, );       
      jpJoueurs.setBounds(0, 0,);
    ce qui va donner un seul composant à l'affichage.
    Pour y remédier, tu dois ajouter un décalage en X ou en Y (ou les 2) et à fin d'afficher les joueurs, tu dois choisir une couleur transparente pour le panneau terrain.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 14
    Par défaut
    Que proposes-tu ?
    Je voulais utiliser un JLayeredPane pour que chaque joueur dispose de sa couche, et cela afin d'éviter un scintillement du à un rafraichissement trop fréquent de la fenêtre.

  6. #6
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Tu devrais lire cette discussion
    Et la fin de celle-ci

    Je pense que ça répondras à toutes tes questions

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 14
    Par défaut
    En effet, je faisais une très mauvaise utilisation du graphisme en Java et mon problème venait de là.

    Merci à tous

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

Discussions similaires

  1. JLayeredPane et taille d'un JPanel
    Par Ceubex dans le forum Interfaces Graphiques en Java
    Réponses: 0
    Dernier message: 08/11/2011, 20h09
  2. JLayeredPane dans JPanel
    Par hebusdetroy dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 04/06/2008, 13h39
  3. Pb scintillement-stabilité lors réaffichage de JPanel
    Par Pill_S dans le forum Composants
    Réponses: 5
    Dernier message: 28/04/2004, 14h03
  4. Listener sur un JPanel
    Par ptitelfe dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 27/03/2004, 13h14
  5. JPanel et Border
    Par titoine dans le forum Débuter
    Réponses: 3
    Dernier message: 22/04/2003, 15h58

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