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 :

Image qui ne se dessine pas au chargement de l'appli


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
    Novembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 110
    Par défaut Image qui ne se dessine pas au chargement de l'appli
    Bonsoir.

    J'ai un problème.
    En fait j'ai une JFrame contenant un JPanel avec un BorderLayout...

    Dans ce JPanel, j'ai deux Cartes (extends JComponent) où je redéfinis paintComponent.

    Au démarrage de l'application, mes deux cartes ne sont pas visibles...
    Par contre si je redimensionne la fenêtre, là c'est bon elles s'affichent.
    J'aimerais que mes cartes soient visibles dès le chargement de l'application...

    Merci en tout cas de votre patience si vous lisez le code ci-dessous.

    Voici le code de la classe Carte:
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    public class Carte extends JComponent implements Comparable<Carte>, Cloneable, MouseListener{
     
        private static final long serialVersionUID = 1L;
        private static final String extensionImagesCartes = ".gif";
        private Couleur couleur;
        private Valeur valeur;
        private Image image;
     
        public int compareTo(Carte carte) {
            return this.valeur.compareTo(carte.valeur);
        }
     
        public void paintComponent(Graphics g){
            //super.paintComponents(g);
            g.drawImage(image, 0, 0, null);
            System.out.println("oui");
        }
        public Dimension getPreferredSize()
        {
            return new Dimension(this.image.getWidth(this),this.image.getHeight(this));
        }
        public Carte(Couleur couleur, Valeur valeur){
     
            this.couleur = couleur;
            this.valeur = valeur;
            this.setLayout(new FlowLayout());
     
            String aze = valeur.getCaractereCarte() + couleur.getCouleurCarte() + extensionImagesCartes;
            this.image = Toolkit.getDefaultToolkit().getImage("C:\\Documents and Settings\\lionrouge\\workspace\\site lionrouge\\fr\\free\\lionrouge\\freecell\\" + aze);
            repaint();
        }
     
     
        public String toString(){
            return "[" + valeur.getCaractereCarte() + "," + couleur.name() + "]";
        }
     
        public Couleur getCouleur() {
            return couleur;
        }
     
        public Valeur getValeur() {
            return valeur;
        }
     
        public Carte clone(){
            return new Carte(this.couleur, this.valeur);
        }
     
        public void mouseClicked(MouseEvent e) {}
        public void mousePressed(MouseEvent e) {}
        public void mouseReleased(MouseEvent e) {}
        public void mouseEntered(MouseEvent e) {}
        public void mouseExited(MouseEvent e) {}
     
    }
    Voici le code de la classe Principale:
    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 Principal extends JPanel implements MouseListener{
     
        private static final long serialVersionUID = 1L;
     
        // dimention de la fenetre
        public static Dimension dimensionFenetre = new Dimension(600, 400);
     
        // couleur de fond de la fenetre
        public static Color couleurFond = new Color(48, 118, 35);
     
        public static void main(String[] args) {
            JFrame jf = new JFrame("FreeCell");
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            Carte a = new Carte(Couleur.PIQUE, Valeur.AS), b = new Carte(Couleur.TREFLE, Valeur.SEPT);
            Principal pp = new Principal();
     
            pp.setLayout(new BorderLayout());
            pp.add(a, BorderLayout.NORTH);
            //pp.add(b, BorderLayout.SOUTH);
            a.addMouseListener(pp);
            b.addMouseListener(pp);
            jf.setContentPane(pp);
            jf.paintAll(jf.getGraphics());
            jf.setSize(Principal.dimensionFenetre);
            jf.setLocationRelativeTo(null);
            jf.setVisible(true);
     
        }
     
        public Principal() {
        }
     
     
        public void mouseClicked(MouseEvent e) {
            JOptionPane.showMessageDialog(this, "coucou");
        }
     
        public void mousePressed(MouseEvent e) {}
        public void mouseReleased(MouseEvent e) {}
        public void mouseEntered(MouseEvent e) {}
        public void mouseExited(MouseEvent e) {}
    }

  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
    remplace l'appel à Toolkit.getDefaultToolkit.getImage("tonChemin"); par un appel à ImageIO.read(new File("tonChemin"));

    Ton problème vient du fait que le toolkit ne charge pas entièrement ton image avant de retourner ta référence....

    Une autre façon de faire serait de passer par un ImageObserver

    Petit conseil: évite de passer le chemin de ton image en dur, ton prog ne marchera que sur ton ordi ce qui est un tant soit peu ballot...

    éventuellement passe par un getClass.getRessourceAsStream("tonCheminRelatifAuRépertoireDanslequelSExectuteTonProg");

    Pour remplacer le new File("tonChemin") dans l'appel à ImageIO.read(...)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 110
    Par défaut
    Merci grandement, tout marche parfaitement.

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

Discussions similaires

  1. [WebForms]Image qui ne s'affiche pas
    Par Filippo dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 19/12/2007, 20h51
  2. [Dessin]Image qui ne s'enleve pas
    Par ehmppowa dans le forum 2D
    Réponses: 4
    Dernier message: 28/03/2006, 11h39
  3. background image qui ne s'affiche pas :(
    Par vermo dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 26/08/2005, 10h01
  4. [HTML]Image qui ne s'affiche pas sous firefox...
    Par OrangeBud dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 13/10/2004, 13h42
  5. [debutant][Tomcat]Images qui ne s'affichent pas
    Par omega dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 07/04/2004, 09h44

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