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 :

Probléme d'interraction avec un boutton ...


Sujet :

AWT/Swing Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Probléme d'interraction avec un boutton ...
    Bonjour , alors mon soucis et que j'aimerais afficher une forme ovale a la suite d'un clic sur un boutton , mais quand j'exécute mon programme (qui est en faite une Applet s'exécutant de la classe Environnement, et qui donc n'a pas besoin de main()) cela me crée des exceptions.
    Voici mes différentes classes:


    1er classe:
    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
     
     
    import java.applet.*;
    import java.awt.*;
     
     
     
    public class Environnement extends Applet { 
     
     
    	static Graphics g;
    	static Maframe f = new Maframe(g);
    	static MonApplet a = new MonApplet();
     
     
    	 public void paint(Graphics g)
    	{
    	 	super.init();
    	 	super.paint(g);
    	 	resize(400,500);
    		a.paint(g);
    	}
     
    	static public void paint2() {
     
    	 	a.paint2(g);
    	 }
     
     
    }
    2e Classe:

    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
     
    import java.awt.*;
     
    public class MonApplet extends Canvas {
     
      public void paint(Graphics g) {
       super.paint(g);     
       g.setColor(Color.black);
       g.drawOval(30,150,20,20);
        }
     
      public void paint2(Graphics g) {
     
     
       g.setColor(Color.black);
       g.fillOval(60,150,20,20);
         repaint();
      }
     
     
    }
    3e Classe:

    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 java.awt.*;
    import java.awt.event.*;
     
     
    public class Maframe extends Frame implements ActionListener{
     
     
     public Maframe( Graphics g) {
         super();
     
         Button b1=new Button("Valider");   // Validation du choix des couleurs
         b1.addActionListener(this);
         add(b1);
         show();
     }
     
     public void actionPerformed (ActionEvent evt) {
      String boutton=evt.getActionCommand();
      if (boutton=="Valider") {
       Environnement.paint2();
      }
    }
    }


    Les exceptions que j'obtient lors du clic sur le boutton sont:
    Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
    at MonApplet.paint2(MonApplet.java:14)
    at Environnement.paint2(Environnement.java:23)
    at Maframe.actionPerformed(Maframe.java:20)
    at java.awt.Button.processActionEvent(Button.java:388)
    at java.awt.Button.processEvent(Button.java:356)
    at java.awt.Component.dispatchEventImpl(Component.java:3955)
    at java.awt.Component.dispatchEvent(Component.java:3803)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)




    Ce que je ne comprend pas , c'est que si je demande a afficher quelque chose a l'écran par l'intémédiaire de System.out.println(".."); lors d'un clic sur le boutton cela s'affiche , donc le programme détecte bien l'événement sur ce boutton mais refuse donc d'afficher une seconde forme ovale , j'en déduis donc que j'ai dus mal initialiser la variable g (celle qui est utiliser dans la méthode paint2 de ma classe MonApplet) et que le programme ne comprend alors peu étre pas que je veux utiliser toujours la méme variable g ...

    Des idées ???

    Merci d'avance

  2. #2
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Je pense, mais ne suis pas sure, que paint() est override donc tu ne dois pas faire super.paint(g); puisque c'est justement toi qui doit la définir.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Ben je ne sais pas ......
    En cours nous avions vu un exemple et dans celui ci la premiére instruction était d'appeller la méthode paint de la classe pére.

    Mais de toute facon , les deux fenétres celle avec le boutton et l'autre avec la forme ovale s'affiche correctement , c'est simplement lorsque je clique sur le boutton que surviennent les exceptions ....

    Merci pour ton aide

  4. #4
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    A quoi correspond la ligne 14 de MonApplet.java ?

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    g.setColor(Color.black);


    (1er instruction de la méthode paint2())

  6. #6
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Color.BLACK plutôt.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Non , j'ai changer et toujours pareil.
    Merci quand méme.

  8. #8
    Membre habitué Avatar de yakanet
    Homme Profil pro
    Inscrit en
    Décembre 2005
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Décembre 2005
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    Color.BLACK plutôt.
    Excuse moi de te contredire, mais les deux ecritures existent.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Je suis désormais certain de la provenance du probléme .... mais je ne sais malgré tout toujours pas comment le résoudre.

    La variable g dans la méthode paint2() de la classe MonApplet n'est pas initialisé , puisqu'elle est égale à null (vérification a l'aide d'un if(g==null)) , ainsi lorsque j'appuie sur le boutton , impossible d'exécuter cette méthode.

    Des idées pour instancier correctement cette variable g afin que le programme comprenne bien que c'est la méme variable que lors de l'exécution de la méthode paint() de la classe MonApplet ???

    Merci d'avance

  10. #10
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Non tu ne peux pas. Il faut plutot faire quelque chose comme cela :

    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
     
    public interface Drawable {
      public void paint(Graphics g);
    }
     
    public class Environnement extends Applet { 
      public void paint(Graphics g) {
        if (drawable != null) {
          drawable.paint(g);
        }
      }
     
      private Drawable drawable = null;
     
      public void paintFilledOval() {
        drawable = new Drawable() {
          public void paint(Graphics g) {
            // peindre un oval plein
          }
        };
        repaint();
      }
     
      public void paintOval() {
        drawable = new Drawable() {
          public void paint(Graphics g) {
            // peindre le contour de l'oval
          }
        };
        repaint();
      }
    }
    Il y a d'autres manieres de faire, notamment avec des if/else, mais l'idee a retenir est que tout le dessin doit etre execute par la methode paint().

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Merci !!


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

Discussions similaires

  1. Problème de mémoire avec BDE
    Par Machuet dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/07/2004, 10h11
  2. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33
  3. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02
  4. [Kylix] problème compilation kylix3 avec redhat 9.0
    Par madininaoursa dans le forum EDI
    Réponses: 1
    Dernier message: 02/07/2003, 16h21
  5. Problèmes de versions avec Xalan, Xerces et Java
    Par honeyz dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 05/06/2003, 10h18

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