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

avec Java Discussion :

Probleme avec un Listener


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 24
    Points : 15
    Points
    15
    Par défaut Probleme avec un Listener
    Bonjour,

    Je voudrais utiliser un listener.
    J'ai fait un programme qui affiche une image. Quand on appuie sur un bouton, on trace un rectangle sur l'image.

    J'arrive a avoir une fenetre avec une image, mais quand j'appuie sur le bouton il ne se passe rien, et visiblement j'ai un pointeur null

    j'ai beau chercher, je ne vois pas où est ce que je pointe sur une objet vide ??

    j'ai dû passer à coté de quelque chose...
    si vous pouviez m'indiquer ce que j'ai oublié ?
    merci


    Image
    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
    import javax.swing.* ;
    import java.awt.event.* ;
    import java.awt.* ;
     
     
    public class Image implements ActionListener
    {
    	private JFrame fen = new JFrame("Image");
    	private JPanel panneauPrinc = new JPanel(new BorderLayout());
    	private JPanel panneauDessous = new JPanel(new FlowLayout());
    	private JButton dessine = new JButton("Dessine");
    	private Modif panneauImageAModifier = new Modif();
     
    	public static void main(String[] args)
    	{
    		new Image();
    	}
     
    	private Image()
    	{
    		panneauDessous.add(dessine);
    		panneauPrinc.add(panneauDessous,BorderLayout.SOUTH);
    		panneauPrinc.add(panneauImageAModifier,BorderLayout.CENTER);
     
    		dessine.addActionListener (this); //fait le lien avec ActionPerformed
     
    		fen.setContentPane(panneauPrinc);
    		fen.pack();
    		fen.setVisible(true);		
    	}
     
    	public void actionPerformed(ActionEvent evt)
    	{
    	    if ( evt.getSource()==dessine )
    	    	panneauImageAModifier.dessiner();
    	}
     
    }
    Modif
    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
    import javax.swing.* ;
    import java.awt.* ;
     
     
    public class Modif extends JPanel 
    {
    	public static Graphics gc;
     
    	public void paintComponent(Graphics gc)
    	{				
    		Toolkit toolkit = getToolkit(); //environnement outil
    		gc.drawImage(toolkit.getImage("image.gif"), 0,0,this); //dessin de Duke
    	}
     
    	public void dessiner()
    	{
    		gc.setColor(Color.blue);
    		gc.drawRect(20,20,15,15);
    	}
    }
    et voilà la liste de mes erreurs
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Modif.dessiner(Modif.java:17)
    at Image.actionPerformed(Image.java:35)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    comment puis je avoir autant d'erreur ?

  2. #2
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Salut,

    C'est ta variable de classe gcqui est null dans ta méthode dessiner().

    En fait ta conception n'est pas bonne. Tous ce que tu dessine doit passer par la méthode public void paintComponent(Graphics gc).

    Ensuite, il vaut mieux ,pour être plus performant, lire ton image une seule fois, plutôt qu'à chaque fois que le panel se dessine.

    Voici un exemple :

    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
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
     
    public class Image implements ActionListener {
     
    	private JFrame fen = new JFrame("Image");
    	private JPanel panneauPrinc = new JPanel(new BorderLayout());
    	private JPanel panneauDessous = new JPanel(new FlowLayout());
    	private JButton dessine = new JButton("Dessine");
    	private Modif panneauImageAModifier = new Modif();
     
    	public static void main(String[] args) {
    		new Image();
    	}
     
    	private Image() {
    		panneauDessous.add(dessine);
    		panneauPrinc.add(panneauDessous, BorderLayout.SOUTH);
    		panneauPrinc.add(panneauImageAModifier, BorderLayout.CENTER);
     
    		dessine.addActionListener(this); // fait le lien avec ActionPerformed
     
    		fen.setContentPane(panneauPrinc);
    		fen.pack();
    		fen.setVisible(true);
    	}
     
    	public void actionPerformed(ActionEvent evt) {
    		if (evt.getSource() == dessine) {
    			panneauImageAModifier.toogleRectangle();
    		}
    	}
     
    }
    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
    import javax.swing.*;
    import java.awt.*;
    import java.awt.Image;
     
    public class Modif extends JPanel {
     
    	private Image image;
    	private boolean paintRect;
     
    	public Modif() {
    		Toolkit toolkit = getToolkit(); // environnement outil
    		image = toolkit.getImage("image.gif");
    	}
     
    	public void toogleRectangle() {
    		paintRect = !paintRect;
    		repaint();
    	}
     
    	public void paintComponent(Graphics gc) {
    		gc.drawImage(image, 0, 0, null); // dessin de Duke
    		if (paintRect) {
    			gc.setColor(Color.blue);
    			gc.drawRect(20, 20, 15, 15);
    		}
    	}
     
    }

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    Merci, je vais essayer ca.

    Je comprends pourquoi mon code ne marchait pas, mais je ne vois comment vous avez fait pour initialiser gc ?
    Dans votre code où est ce que gc est initialisée ?
    on le met en paramètre dans paintComponent, mais nulle part on ne dit gc=... ???

    Peut etre que je comprend mal la fonction paintComponent ? Elle initialiserait automatiquement un objet de type Graphics c'est ça ?

  4. #4
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Citation Envoyé par droledenom Voir le message
    Dans votre code où est ce que gc est initialisée ?
    Null part. La méthode paintComponent est redéfini (héritage de JPanel). Si tu regarde dans JPanel, tu verra qu'il existe une méthode paintComponent, de même que dans JComponent dont hérite JPanel...

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    merci

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

Discussions similaires

  1. probleme avec le listener
    Par mandev dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 21/05/2011, 05h03
  2. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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