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 :

[JLabel] Afficher des images


Sujet :

Composants Java

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 127
    Points : 52
    Points
    52
    Par défaut [JLabel] Afficher des images
    slt,
    voila g un pb, j'essaye de faire un editeur de carte seulement voila je suis bloqué, j'arrive bien a afficher les images mais seulement la derniere s'affiche, ce qu'il y avait avant part ! Or je voudrais garder justement, voici le code :

    Carte.java
    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
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
     
    public class Carte extends JLabel
    {
    public Carte (Menu Menu_recu)
    {
    Menu_courant = Menu_recu;
    this.addMouseListener(
    new MouseAdapter()
    {
    public void mousePressed (MouseEvent Clic)
    {
    if (SwingUtilities.isLeftMouseButton(Clic))
    {
    X_recue = Clic.getX();
    X_recue = (((int)(X_recue / 16)) * 16);
    Y_recue = Clic.getY();
    Y_recue = (((int)(Y_recue / 16)) * 16);
    Image_recue = Menu_courant.Renvoie_image();
    repaint();
    }
    }
    });
    }
     
    public void paintComponent (Graphics g)
    {
    super.paintComponent(g);
    g.drawImage(Image_recue, X_recue, Y_recue, null);
    }
     
    private Menu Menu_courant;
    private Image Image_recue;
    private int X_recue;
    private int Y_recue;
    }

    Menu.java
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
     
    public class Menu extends JLabel
    {
    public Menu ()
    {
    Kit = Toolkit.getDefaultToolkit();
    Nom_image = "Defaut.gif";
    Image_courante = Kit.getImage(getClass().getResource(Nom_image));
    Ajoute_image("bleu.gif", 0, 0);
    Ajoute_image("vert.gif", 16, 0);
    Ajoute_image("jaune.gif", 32, 0);
    Ajoute_image("rouge.gif", 48, 0);
    this.addMouseListener(
    new MouseAdapter()
    {
    public void mouseClicked (MouseEvent Clic)
    {
    if (SwingUtilities.isLeftMouseButton(Clic))
    {
    X = Clic.getX();
    X = (((int)(X / 16)) * 16);
    Y = Clic.getY();
    Y = (((int)(Y / 16)) * 16);
    Determine_image();
    }
    }
    });
    }
     
    public void Determine_image ()
    {
    switch (Y)
    {
        case 0:
        switch (X)
        {
            case 0:
            Nom_image = "bleu.gif";
            break;
            case 16:
            Nom_image = "vert.gif";
            break;
            case 32:
            Nom_image = "jaune.gif";
            break;
            case 48:
            Nom_image = "rouge.gif";
            break;
        }
        break;
    }
    Image_courante = Kit.getImage(getClass().getResource(Nom_image));
    }
     
    public Image Renvoie_image()
    {return Image_courante;}
     
    public void Ajoute_image (String Nom_image_recue_menu, int X_recue_menu, int Y_recue_menu)
    {
    Image_menu = Kit.getImage(getClass().getResource(Nom_image_recue_menu));
    X_menu = X_recue_menu;
    Y_menu = Y_recue_menu;
    repaint();
    }
     
    public void paintComponent (Graphics g)
    {
    super.paintComponent(g);
    g.drawImage(Image_menu, X_menu, Y_menu, null);
    }
     
    private int X;
    private int Y;
    private int X_menu;
    private int Y_menu;
    private Image Image_courante;
    private Image Image_menu;
    private Toolkit Kit;
    private String Nom_image;
    }

    Fenetre.java
    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
     
    import javax.swing.*;
    import java.awt.*;
     
     
    public class Fenetre extends JFrame
    {
    public Fenetre()
    {
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    setTitle("[ Editeur de carte ] : Fichier vierge");
    setSize(705, 480);
    setResizable(false);
    Menu Menu_affichee = new Menu();
    Carte Carte_affichee = new Carte(Menu_affichee);
    JSplitPane Separateur = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
    Separateur.setDividerSize(1);
    Separateur.setDividerLocation(64);
    Separateur.setLeftComponent(Menu_affichee);
    Separateur.setRightComponent(Carte_affichee);
    Container Contenu_fenetre = getContentPane();
    Contenu_fenetre.add(Separateur);
    setVisible(true);
    }    
    }
    merci d'avance pour toutes vos réponses

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par dans les règles il y
    Les insertions de lignes de code dans vos messages doivent rester exceptionnelles et limitées à moins d'une dizaine de lignes qu'il est conseillé de numéroter

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 127
    Points : 52
    Points
    52
    Par défaut
    désolé mais je n'avais pas d'autre choix vu que tout est dans le code

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 127
    Points : 52
    Points
    52
    Par défaut
    personne pour aider un pauvre débutant

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Salut,

    En regardant rapidement ton code (donc je te promets pas que cela resoudra tout !), mais lorsque tu fais Ajoute_image(), tu appelles la methode paintComponent(). Et cette methode ne peint qu'une seule image g.drawImage(). Les actions de paintComponent ne sont pas cumulee avec les actions anterieures (je ne sais pas si je suis tres clair). Autrement dit, lorsque tu appelle paintComponent tu "effaces" le contenu precedent et tu en affiches un nouveau en tenant compte de nouveaux parametres. Ici, tes images sont affichees successivement, l'une effacant l'autre (meme si physiquement elle ne se superpose pas), du coup tu ne vois que la derniere, puisque les valeurs de Image_menu, X_menu, Y_menu correspondent a la derniere image ! OK ?

    Donc, il faut que dans le meme paintComponent tu fasses 4 g.drawImage(), un appel pour chaque image ! Donc tu peux faire ca via des List qui stocke au fur et a mesure les images que tu creer ou directement avec des variables si tu te limites a 4 images, ou une classe Image(), ... Enfin la je te laisses faire. Mais il faut grosso modo qu'au final ca corresponde a ca !


    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
     
    public class Menu extends JLabel 
    { 
    public Menu () 
    { 
    [..]
    Ajoute_image("bleu.gif", 0, 0); 
    Ajoute_image("vert.gif", 16, 0); 
    Ajoute_image("jaune.gif", 32, 0); 
    Ajoute_image("rouge.gif", 48, 0); 
    [..]
    } 
     
    [..]
     
    public void Ajoute_image (String Nom_image_recue_menu, int X_recue_menu, int Y_recue_menu) 
    { 
    Image_menu = Kit.getImage(getClass().getResource(Nom_image_recue_menu)); 
    X_menu = X_recue_menu; 
    Y_menu = Y_recue_menu; 
     
    /*
    a modifier
    /*
     
    } 
     
    public void paintComponent (Graphics g) 
    { 
    super.paintComponent(g); 
    g.drawImage(Image_menu1, X_menu1, Y_menu1, null); 
    g.drawImage(Image_menu2, X_menu2, Y_menu2, null); 
    g.drawImage(Image_menu3, X_menu3, Y_menu3, null); 
    g.drawImage(Image_menu4, X_menu4, Y_menu4, null); 
    }
    Voila,
    j'ai pas mis le nez dans le reste du code, donc je sais pas si il y a d'autres modifs a faire, notamment dans la classe Carte ( ou il semble que tu utilisait la meme chose, un paintComponent qui ne dessine qu'une seule image sur les 4, mais la c'est peut etre ce que tu souhaites ! ... ) Comme je ne sais pas exactement ce que tu souhaite faire, a toi de voir !

    En esperant avoir pu t'aider

    Delphine

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 127
    Points : 52
    Points
    52
    Par défaut
    j'ai compris ce que tu veux dire seulement la solution proposée n'est pas envisageable, pour le JLabel contenant la carte il faut directement au clic afficher l'image je ne peux pas le faire plus tard.
    existe t-il une alternative pour éviter le probleme ?

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 127
    Points : 52
    Points
    52
    Par défaut
    please help me
    comment ne pas effacer le contenu précédent en ajoutant mon image ?

  8. #8
    KKI
    KKI est déconnecté
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Le problème vient du fait que repaint() efface complétement le contenu de ton composant et te demande de le redessiner intégralement.

    Si tu veux conserver la trace de ce que tu avais avant d'ajouter la nouvelle image, utilise une variable d'instance de classe BufferedImage dans le contexte de laquelle tu vas dessiner tes images et dessine ensuite l'image obtenue dans l'objet Graphics récupéré en paramètre de paintComponent

    de tête sans tester...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    BufferedImage imageCarte;
    public void paintComponent (Graphics g) 
    { 
      if (imageCarte == null) {
        imageCarte = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);
      }
      imageCarte.getGraphics().drawImage(Image_menu, X_menu, Y_menu, null); 
      g.drawImage(imageCarte, 0, 0, null); 
      g.dispose();
    }
    A quelques bugs près...

  9. #9
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 127
    Points : 52
    Points
    52
    Par défaut
    ca marche à la perfection merci beaucoup

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

Discussions similaires

  1. [DIV] afficher des images aux 4 coins d'un DIV
    Par _Mac_ dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 17/11/2005, 09h41
  2. Afficher des images sur une grille
    Par Coussati dans le forum Composants VCL
    Réponses: 3
    Dernier message: 27/10/2005, 09h27
  3. [C#] Afficher des images dans un datagrid
    Par mbibim63 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/05/2005, 12h22
  4. Afficher des images sous directX
    Par cyberlewis dans le forum DirectX
    Réponses: 17
    Dernier message: 12/07/2004, 12h07
  5. [TP][MULTI-PROBLEME]Comment afficher des images pcx
    Par mikoeur dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 24/10/2002, 13h57

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