Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1210 connectés 

  FORUM HardWare.fr
  Programmation
  Java

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1273147
hostile4
Posté le 25-12-2005 à 16:04:39  profilanswer
 

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) cela me crée des exceptions.  
Voici mes différentes classes:
 
 
1er classe:

Code :
  1. import java.applet.*;
  2. import java.awt.*;
  3. public class Environnement extends Applet {
  4. static Graphics g;
  5. static Maframe f = new Maframe(g);
  6. static MonApplet a = new MonApplet();
  7.  public void paint(Graphics g)
  8. {
  9.   super.init();
  10.   super.paint(g);
  11.   resize(400,500);
  12.  a.paint(g);
  13. }
  14. static public void paint2() {
  15.   a.paint2(g);
  16.  }
  17. }


 
2e Classe:
 

Code :
  1. import java.awt.*;
  2. public class MonApplet extends Canvas {
  3.  
  4.   public void paint(Graphics g) {
  5.    super.paint(g);   
  6.    g.setColor(Color.black);
  7.    g.drawOval(30,150,20,20);
  8.     }
  9.  
  10.   public void paint2(Graphics g) {
  11.  
  12.    g.setColor(Color.black);
  13.    g.fillOval(60,150,20,20);
  14.      repaint();
  15.   }
  16.  
  17. }


3e Classe:
 

Code :
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. public class Maframe extends Frame implements ActionListener{
  4. public Maframe( Graphics g) {
  5.      super();
  6.  
  7.      Button b1=new Button("Valider" );   // Validation du choix des couleurs
  8.      b1.addActionListener(this);
  9.      add(b1);
  10.      show();
  11. }
  12. public void actionPerformed (ActionEvent evt) {
  13.   String boutton=evt.getActionCommand();
  14.   if (boutton=="Valider" ) {
  15.    Environnement.paint2();
  16.   }
  17. }
  18. }


 
 
 
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 pour une raison qui m'échappe ...
 
Des idées ???
 
Merci d'avance


Message édité par hostile4 le 26-12-2005 à 12:32:46
mood
Publicité
Posté le 25-12-2005 à 16:04:39  profilanswer
 

n°1273206
trevor
laissez la vie vous étonner...
Posté le 26-12-2005 à 00:16:39  profilanswer
 

modifies ton message en mettant le code de chacune de tes classes dans un [code ][/code] ca sera + facile pour se repérer par rapport aux lignes où ont lieu tes exceptions


Message édité par trevor le 26-12-2005 à 00:22:54
n°1273238
hostile4
Posté le 26-12-2005 à 10:26:45  profilanswer
 

Voila , c'est fait

n°1273257
trevor
laissez la vie vous étonner...
Posté le 26-12-2005 à 11:23:08  profilanswer
 

tu as donné tout le code ? car le compilateur fait référence à des lignes du code de tes classes qui n'existe pas... du coup j'arrive pas à voir où le NullPointerException est déclenché
 
ps: cette méthode de gestion des événement, c'est l'ancienne méthode je crois. c'est pas tiptop et un peu galère (mais je ne crois pas que ton pb vienne de là)


Message édité par trevor le 26-12-2005 à 11:23:58

---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
n°1273260
hostile4
Posté le 26-12-2005 à 11:36:48  profilanswer
 

Oui j'ai donné tout le code , les autres classes auquel le compilateur fait référence sont des classes que j'importe, il n'y a pas de main() puisqu'il s'agit d'une applet.
Sinon pour la méthode de gestion des événements , c'est celle que j'ai vu en cours , et donc je pensais pouvoir la ré-utiliser bétement...
 
Je pense avoir compris que dans la méthode paint2 de la classe MonApplet , la variable g a soucis d'initialisation , car si je place uniquement dans cette méthode l'instruction System.out.println("Action sur le boutton détecté" ); , le programme s'exécute sans soucis.
Mais je ne vois pas comment faire comprendre au programme que je veux modifier l'objet graphics initiale (puisque j'ai utiliser le mot clés static pour définir la variable g , mais apparament sans succés)...
 
Merci pour votre aide


Message édité par hostile4 le 26-12-2005 à 11:37:34
n°1273277
trevor
laissez la vie vous étonner...
Posté le 26-12-2005 à 12:23:52  profilanswer
 

ouais ok pour le main(), je sais. je ne prendrais pas la peine de te répondre si je ne connaissais pas un peu
 
cependant, lorsque je lis:
Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException  
 at MonApplet.paint2(MonApplet.java:30)
je suis désolé, mais je ne vois pas de ligne 30 dans la classe MonApplet


---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
n°1273280
hostile4
Posté le 26-12-2005 à 12:35:16  profilanswer
 

Ah oui désoler j'ai merdé , lorsque j'exécuter le prog avec éclipse , j'avais laisser les lignes de commentaires qu'éclipse m'affiche automatiquement .... ce qui modifie les numéro des lignes ..... mais voila j'ai rétablis dans mon 1er message.
 
 

n°1273341
trevor
laissez la vie vous étonner...
Posté le 26-12-2005 à 16:25:26  profilanswer
 

bon, ton pb semble venir du g.setColor() dans la méthode paint2().
très certainement ton objet g ne doit pas être initialisé correctement, fait un if (g==null) System.out.println("g non-initialisé" ); avant le setColor() et vois si effectivement g n'est pas correctement instancié


Message édité par trevor le 26-12-2005 à 16:25:44

---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
n°1273351
hostile4
Posté le 26-12-2005 à 16:53:57  profilanswer
 

Exact , c'est bien ca le probléme , merci.
Lorsque je clique sur le bouton , le message "g non-initialisé" s'affiche bien à l'écran.
 
Mais maintenant comment faire comprendre au programme que j'utilise toujours la méme variable g ? ... celle qui m'a permis d'exécuter la méthode paint() de la classe MonApplet ... je pensais qu'en déclarant g comme étant static cela réglé le pb ...là je vois pas.

n°1273364
trevor
laissez la vie vous étonner...
Posté le 26-12-2005 à 17:26:01  profilanswer
 

essaye sans le "static" justement. d'ailleurs, je n'ai pas vraiment compris pourquoi tes attributs de Environnement sont déclarés statiques... que voulais-tu faire ?
 
ps: ça n'est pas très logique de faire une sous-classe de Applet qui s'appeller Environnement, et une sous-classe de Canvas qui s'appelle MonApplet... c'est ta classe dérivée de Applet qui devrait s'appeller MonApplet


---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
mood
Publicité
Posté le 26-12-2005 à 17:26:01  profilanswer
 

n°1273375
hostile4
Posté le 26-12-2005 à 17:56:09  profilanswer
 

Pour les noms des classes , c'est n'importe quoi je sais , c'est parce qu'a la base je pensais arriver a créer des boutton , des barres de choix ainsi que des figures géométrique dans une classe héritant de la classe Applet ....  mais j'ai pas réussi et alors j'ai créer des classe sans faire attention a leurs noms.
 
Pour les static , ben ca vient du fait que je voulais depuis la classe Maframe appeller une méthode de la classe MonApplet (faire apparaitre une seconde forme ovale aprés un click sur le boutton) , et pour cela j'ai trouver de mieux que de passer par une méthode de ma classe Environnement qui devait étre static vu la facon dont je l'appellais.... d'ailleurs maintenant que j'ai enlever le mot clés static pour les variables et la méthodes paint2() de la classe Environnement , je ne sais plus comment faire pour exécuter cette classe depuis ma classe Maframe aprés un click sur le boutton (soit depuis sa méthode  actionPerformed())...
 
 
Voici les nouveaux codes de mes classes:
 

Code :
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. public class Maframe extends Frame implements ActionListener{
  4. public Maframe( Graphics g) {
  5.      super();
  6.      Button b1=new Button("Valider" );   // Validation du choix des couleurs
  7.      b1.addActionListener(this);
  8.      add(b1);
  9.      show();
  10. }
  11. public void actionPerformed (ActionEvent evt) {
  12.   String boutton=evt.getActionCommand();
  13.   if (boutton=="Valider" ) {
  14.    // Comment appeller la fonction paint2() de la classe Environnement voir de la classe MonApplet
  15.   }
  16. }
  17. }


 

Code :
  1. import java.awt.*;
  2. public class MonApplet extends Canvas {
  3.  
  4.   public void paint(Graphics g) {
  5.    super.paint(g);   
  6.    g.setColor(Color.black);
  7.    g.drawOval(30,150,20,20);
  8.     }
  9.  
  10. public void paint2(Graphics g) {
  11.  
  12.    if ( g==null)
  13.    {System.out.println("g non-initialisé" );}
  14.    else {
  15.     g.setColor(Color.BLACK);
  16.     g.fillOval(60,150,20,20);
  17.     repaint();
  18.   }}
  19.  
  20. }


 

Code :
  1. import java.applet.*;
  2. import java.awt.*;
  3. public class Environnement extends Applet {
  4.  Graphics g;
  5.  Maframe f = new Maframe(g);
  6.  MonApplet a = new MonApplet();
  7.  public void paint(Graphics g)
  8. {
  9.   super.init();
  10.   super.paint(g);
  11.   resize(400,500);
  12.  a.paint(g);
  13. }
  14. public void paint2() {
  15.  a.paint2(g);
  16.  }
  17. }


 
Donc voila a tu une solution pour appeller la méthode paint2() de la classe Environnement aprés un click sur le boutton ?? .... merci bcp pour ton aide
 
 
 
J'ai oublier de préciser que si je crée un objet de type Environnement pour m'en servir afin d'appeller la méthode paint2() , un click sur le boutton fera ouvrir une autre fenétre comportant ce méme boutton etc....  donc voila , je vois pas du tout.


Message édité par hostile4 le 26-12-2005 à 17:58:28
n°1273420
trevor
laissez la vie vous étonner...
Posté le 26-12-2005 à 19:01:07  profilanswer
 

L'un des seuls intérêts d'une méthode statique (à ma connaissance), qui se base sur la définition de "static" c'est de faire une méthode qui s'apparente plus à une fonction. Je fais des méthodes statiques sur des classes fourre-tout type "boîte-à-outils", parce que j'ai juste besoin de faire passer un objet par diverses manipulations. donc ça sert pas à gdchose d'instancier spécifiquement un objet pour ça.
bon ça sert aussi pour effectuer des instanciations spécifiques (genre un singleton ou autres)
Pour les attributs, l'intérêt réside dans le fait de conserver la valeur entre 2 instanciations différentes: pratique pour mémoriser la valeur ou bien pour "passer" un attribut qcque pdt une récursivité
 


---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
n°1273437
trevor
laissez la vie vous étonner...
Posté le 26-12-2005 à 20:14:31  profilanswer
 

Sans vouloir faire chier, je crois qu'il faut que tu reprennes tout depuis le début...
en effet, pourquoi avoir une frame, vu que tu as deja une applet. une applet est une application graphique, sauf qu'elle s'exécute avec la jvm du navigateur, et pas la jvm de l'os
donc, tu peux très facilement insérer n'importe quel élément graphique
 
je te donne le bout d'une applet que j'ai développée (et qui fonctionne bien sûr ;)) :

Code :
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. import java.applet.*;
  5. public class BiblioApplet extends Applet {
  6.   private JPanel jPanelControls = new JPanel();
  7.   private JPanel jPanelParameters = new JPanel();
  8.   private JTextField jTextFieldServerIP = new JTextField();
  9.   private JTextField jTextFieldName = new JTextField();
  10.   public void init() {
  11.     try {jbInit();}
  12.     catch(Exception e) {e.printStackTrace();}
  13.     this.setSize(400, 260);
  14.   }
  15.   private void jbInit() throws Exception {
  16.     this.setLayout(new BorderLayout());
  17.     this.add(jPanelControls, BorderLayout.CENTER);
  18.     jPanelControls.setLayout(new GridLayout(1, 2));
  19.     jPanelControls.add(jPanelParameters, null);
  20.     jPanelParameters.setLayout(new VerticalFlowLayout());
  21.     jPanelParameters.add(jTextFieldServerIP, null);
  22.     jPanelParameters.add(jTextFieldName, null);
  23.   }
  24.   ...
  25. }


---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
n°1273872
hostile4
Posté le 27-12-2005 à 19:13:34  profilanswer
 

Merci bcp pour ton aide et je vais suivre ton conseil , je vais tout recommencer juste avec une Applet.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

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

 

Sujets relatifs
problème avec formulaireprobleme avec les tableaux html sous IE
[C++] Urgent SVP!! Fabrique abstraite : probleme de castProbleme de "scrollbar" quand frame sous firefox
Problème Front Pageprobleme avec dreamwaver
Problème avec un template: balise boddy déséquilibrée[Delphi]Un probleme tout bête à resoudre.
Problème de débutant avec strcat[CSS] Problème de CSS avec Firefox, mais pas avec Opera ou IE.
Plus de sujets relatifs à : Probléme d'interraction avec un boutton ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR