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

Agents de placement/Fenêtres Java Discussion :

JPanel et ses évènements


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Points : 139
    Points
    139
    Par défaut JPanel et ses évènements
    Bonjour,

    Je n'ai pas trouvé la solution en effectuant une recherche sur le site !

    Bref, je cherche à remplacer une image img1 par une autre image img2 lorsque la souris entre dans le panneau contenant img1 et inversement lorsque la souris en sort.

    J'y parviens mais lorsque la souris entre ou sort du cadre JFrame et non de JPannel. Je ne comprends pas pourquoi !!

    Voici le 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
    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
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
    import javax.swing.*;
     
    public class MainClass {
     
     
    	public static void main(String[] args) {
        JFrame aWindow = new JFrame();
        RecordPanel _canvas = new RecordPanel();
        _canvas.setBounds(0,0,80,80);
        aWindow.add(_canvas);
        aWindow.setBounds(200, 200, 200, 200);
        aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        aWindow.setTitle("Mon premier programme");
        aWindow.setVisible(true);
      }
    }
     
    class RecordPanel extends JPanel implements MouseListener, MouseMotionListener {
     
    	BufferedImage img1;
    	BufferedImage img2;
    	BufferedImage ImageBuffer;
     
     
      public RecordPanel() {
    	 try{
    	  img1 = ImageIO.read(new File("strawberry[1].jpg"));
          img2 = ImageIO.read(new File ("stylo.jpg"));
          addMouseListener(this);
          addMouseMotionListener(this);
    	 }
    	 catch (IOException e) {
         }
      }
     
      public void mouseClicked(MouseEvent me) {
      }
     
      public void mouseEntered(MouseEvent me) {
    	  	if(ImageBuffer==null)
    	  	{
    	  		ImageBuffer=img1;
    	  	}
    	  	else
    	  	{
    	  		ImageBuffer=img2;
    	  	}
    	    repaint();
      }
     
      public void mouseExited(MouseEvent me) {
    	  	ImageBuffer=img1;
    	    repaint();
      }
     
      public void mousePressed(MouseEvent me) {
     
      }
     
      public void mouseReleased(MouseEvent me) {
      }
     
      public void mouseDragged(MouseEvent me) {
      }
     
      public void mouseMoved(MouseEvent me) {
      }
     
      public void paint(Graphics g) {
    	  if(ImageBuffer==null){
    		  ImageBuffer=img1;
    	  }
    	  g.drawImage(ImageBuffer,0,0,null);
     
      }
    }
    Pouvez-vous éclairer ma lanterne?

    Merci

  2. #2
    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 : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    En fait ton code fonctionne très bien. Pour t'en convaincre, change la couleur de fond de ton Panel : il prend toute la surface de la frame. Le setBounds n'est pas pris en compte à cause du layout par défaut.
    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.

  3. #3
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Points : 139
    Points
    139
    Par défaut
    Je sèche

    J'ai repris le code ainsi mais cela ne fonctionne toujours pas !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	public static void main(String[] args) {
        JFrame aWindow = new JFrame();
        RecordPanel _canvas = new RecordPanel();
        _canvas.setLayout(new FlowLayout());
        _canvas.setPreferredSize(new Dimension(80, 80));
     
        aWindow.add(_canvas);
        aWindow.pack();
        aWindow.setBounds(200, 200, 200, 200);
        aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        aWindow.setTitle("Mon premier programme");
        aWindow.setVisible(true);
      }
    ou j'ai changer le fond de la class REcordPanel
    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
    public RecordPanel() {
    	 try{
     
    	 img1 = ImageIO.read(new File("strawberry[1].jpg"));
         img2 = ImageIO.read(new File ("stylo.jpg"));
          addMouseListener(this);
     
     
         setBackground(Color.yellow);
     
     
    	 }
    	 catch (IOException e) {
         }
     
      }
    mais pas de couleur jaune sur tout le frame

  4. #4
    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 : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par bastien Voir le message
    mais pas de couleur jaune sur tout le frame
    Je pensais être fatigué, alors j'ai lancé mon Eclipse, et testé ton code : la couleur jaune est bien sur toute la surface du panel. Mon explication est toujours valable. change de layout, ou alors calcule la taille de l'image pour faire le changement uniquement sur l'image.
    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.

  5. #5
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Points : 139
    Points
    139
    Par défaut
    Bonjour,

    Comme toi, je suis sous eclipse et lorsque le lance le code suivant, je n'ai pas de jaune !

    strawberry[1].jpg et stylo.jpg sont des images de dimension 80 x 80

    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
    86
    87
    88
    89
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
    import javax.swing.*;
     
    public class MainClass {
     
     
    	public static void main(String[] args) {
        JFrame aWindow = new JFrame();
        RecordPanel _canvas = new RecordPanel();
        aWindow.add(_canvas);
     
        aWindow.pack();
        aWindow.setBounds(200, 200, 200, 200);
        aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        aWindow.setTitle("Mon premier programme");
        aWindow.setVisible(true);
     
      }
    }
     
    class RecordPanel extends JPanel implements MouseListener{
     
    	BufferedImage img1;
    	BufferedImage img2;
    	BufferedImage ImageBuffer;
     
     
      public RecordPanel() {
    	 try{
     
    	 img1 = ImageIO.read(new File("strawberry[1].jpg"));
         img2 = ImageIO.read(new File ("stylo.jpg"));
          addMouseListener(this);
          setBackground(Color.yellow);
          setSize(100,100);
    	 }
    	 catch (IOException e) {
         }
     
      }
     
      public void mouseClicked(MouseEvent me) {
      }
     
      public void mouseEntered(MouseEvent me) {
    	  	if(ImageBuffer==null)
    	  	{
    	  		ImageBuffer=img1;
    	  	}
    	  	else
    	  	{
    	  		ImageBuffer=img2;
    	  	}
    	  	System.out.println(me.getX() + " - " + me.getY());
    	    repaint();
      }
     
      public void mouseExited(MouseEvent me) {
    	  	ImageBuffer=img1;
    	    repaint();
      }
     
      public void mousePressed(MouseEvent me) {
     
      }
     
      public void mouseReleased(MouseEvent me) {
      }
     
      public void mouseDragged(MouseEvent me) {
      }
     
      public void mouseMoved(MouseEvent me) {
      }
     
      public void paint(Graphics g) {
    	  if(ImageBuffer==null){
    		  ImageBuffer=img1;
    	  }
    	  g.drawImage(ImageBuffer,0,0,null);
     
      }
    }

    ?????????????????????????????????????????????

  6. #6
    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 : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Milles excuses, j'ai oublié de te donner un détail pour prouver mes dires :
    il ne faut pas surcharger "paint" de JPanel, sauf si tu as de bonnes raisons de le faire.
    La méthode devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void paintComponent( Graphics g )
    	{
    		super.paintComponent( g );
    		if( ImageBuffer == null )
    		{
    			ImageBuffer = img1;
    		}
    		g.drawImage( ImageBuffer, 0, 0, null );
     
    	}
    Et le fond jaune va apparaitre
    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.

  7. #7
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Points : 139
    Points
    139
    Par défaut
    En effet, le dysfonctionnement provenait de la surcharge de paint !!

    Par ailleurs, j'ai modifié le layout et la dimension du panel.

    Par contre, j'utilisai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setPreferredSize(80,80);
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setPreferredSize(new Dimension(80,80));
    d'où mon incompréhension à voir le panel changer de taille !!!!!


    Merci

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

Discussions similaires

  1. tester ses événements
    Par une_tite_question dans le forum NetBeans
    Réponses: 2
    Dernier message: 16/04/2008, 16h50
  2. recuperer un JPanel et ses dessins
    Par keub51 dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 07/03/2007, 11h25
  3. TreeView et ses événements
    Par Cpt Anderson dans le forum Delphi
    Réponses: 4
    Dernier message: 15/02/2007, 13h10
  4. Réponses: 1
    Dernier message: 29/11/2006, 03h20
  5. JList et ses événements
    Par DJuL- dans le forum Composants
    Réponses: 3
    Dernier message: 27/06/2006, 10h24

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