Probleme de addActionListener [résolu]

Probleme de addActionListener [résolu] - Java - Programmation

Marsh Posté le 12-12-2004 à 11:57:32    

Bonjour, je suis debutante en java, je voudrais qu'en cliquant sur un bouton de ma fenetre, il me créé un rectangle et me l'affiche. Voici la structure de mon programme:  
 

Code :
  1. class Fenetre extends Frame {
  2.    
  3.     Fenetre(){
  4.         super ("Fenetre" );
  5.         setSize(800, 600);
  6.        
  7.         //Traitement de la fermeture de la fenetre  
  8.         addWindowListener( new WindowAdapter(){
  9.             public void windowClosing(WindowEvent e){
  10.                 System.exit(0);
  11.             }
  12.         });
  13.        
  14.         /* Bordure de la fenetre */
  15.         setLayout(new BorderLayout());
  16.        
  17.         /* Partie centrale, Canvas */
  18.         MonCanvas d1 = new MonCanvas();
  19.         add("Center",d1);
  20.        
  21.         /* Panel du bas de la fenetre */
  22.         Panel p = new Panel();
  23.         add("South",p);
  24.         //Bouton quit  
  25.         Button quit = new Button("Quitter" );
  26.         p.add(quit);
  27.         quit.addActionListener(new Ecouteur2());
  28.         //Bouton rectangle  
  29.         Button rectangle = new Button("Rectangle" );
  30.         p.add(rectangle);
  31.         rectangle.addActionListener(new Ecouteur3());
  32.         //Fenetre visible  
  33.         setVisible(true);
  34.     }
  35.    
  36.     public static void main( String args[] ) {
  37.             Fenetre f = new Fenetre();
  38.      }
  39. }
  40. class Rectangle implements Dessinable {
  41.    
  42.     int longueur,largeur;
  43.    
  44.     //interface Dessinable  
  45.     public void dessine(Graphics g){
  46.         g.drawRect(100, 50 , 100 , 50);
  47.    }
  48. }
  49. interface Dessinable {
  50.     public void dessine(Graphics g);
  51. }
  52. class MonCanvas extends Canvas{
  53.    
  54.     MonCanvas(){
  55.         super();
  56.     }
  57.    
  58.     private Vector memoire = new Vector(); // constructeur  
  59.     public void addelement(Dessinable d) {
  60.         memoire.add(d);
  61.     }
  62.  
  63.     public void paint(Graphics g){
  64.        
  65.         //on dessine les objets  
  66.         int index = 0;
  67.         while(index < memoire.size()) {
  68.             //System.out.println(memoire.elementAt(index));  
  69.             ((Dessinable)memoire.elementAt(index)).dessine(g);
  70.             index++;
  71.         }
  72.     }
  73. }
  74.        
  75. class Ecouteur2 implements ActionListener {
  76.     public void actionPerformed(ActionEvent e){
  77.         System.exit(0);
  78.     }
  79. }
  80. class Ecouteur3 implements ActionListener {
  81.     public void actionPerformed(ActionEvent e){
  82.         memoire.addelement(new Rectangle(30,30));
  83.         repaint();
  84.     }
  85. }


Or je n'arrive pas a avoir l'affichage du rectangle depuis ce bouton 'Ecouteur3'...  
 
Quelqu'un pourrait il m'aider ?


Message édité par myeve le 12-12-2004 à 23:12:50
Reply

Marsh Posté le 12-12-2004 à 11:57:32   

Reply

Marsh Posté le 12-12-2004 à 12:41:32    

Et t'as pas des erreurs de compilation avec ça ?


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 12-12-2004 à 12:42:28    

ben non pourquoi ca va pas du tout ?

Reply

Marsh Posté le 12-12-2004 à 12:44:20    

j'sais pas mais c'est moche et pas facile à comprendre. Tu le sors d'où memoire dans ton Ecouteur3 ?


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 12-12-2004 à 12:47:30    

je sais que ca doit etre moche, c pour cela que je demande eds conseils, je suis un peu perdue...
 
Ba en fait pour 'memoire', je cherche a appeler mon vector pour qu'il me stocke mon element..
 

Reply

Marsh Posté le 12-12-2004 à 13:00:06    

perso je trouve pas ça si moche, y'a même un truc qui me parait assez finau pour une débutante, avec l'interface Dessinable ! Et c'est pas WhatDe notre grand spécialiste es-java qui me contredire, tu peux lui demander !
 
le problème - à vue de nez - c'est ton appel de repaint(), j'crois que c'est un truc à te prendre des coups de pelle à clou -  à confirmer.
 
t'as essayé de mettre un bete System.out.print("pouet" ) dans ton ecouteur3? ou d'utiliser un debugger?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 12-12-2004 à 13:07:01    

oui si je mets un System.out.print("pouet" ); ca marche tres bien il me l'affiche dans l'output.
 
Mais tu as raison mon repaint() je faisais ca en test ca sert a rien je pense..
Le truc c'est que le rectangle que je demande a aficher dans mon 'ecouteur3' ne s'affiche pas alors que si je mets "d1.addelement(new Rectangle(30,30));" en dessous de "add("Center",d1);" ca fonctionne tres bien.
 
C'es dans la partie ecouteur3 que ca ne focntionne pas.
Et si je mets "d1.addelement(new Rectangle(30,30));" dans mon 'ecouteur3', il ne veut pas --> 'cannot find symbol'

Reply

Marsh Posté le 12-12-2004 à 13:10:58    

ben normal, d1 est local au constructeur de ta 1ere classe.
non, le probleme c'est uniquement le repaint, mais je ne sais plus ce qu'il faut faire à place.
demande a whatde [:icon12]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 12-12-2004 à 13:16:36    

the real moins moins a écrit :

perso je trouve pas ça si moche, y'a même un truc qui me parait assez finau pour une débutante, avec l'interface Dessinable ! Et c'est pas WhatDe notre grand spécialiste es-java qui me contredire, tu peux lui demander !


C'est clair. Je sais pas ce que branle WhatDe, il faudrait lui envoyer un Message Perso pour qu'il vienne sur ce topic pour résoudre les problème d'exécution du code, vu que c'est le seul qui maîtrise le Java par ici.  
 
Mais le dimanche, il a pas ses entraînements de pompier volontaire ? Ou bien il a sport ?

Reply

Marsh Posté le 12-12-2004 à 13:17:57    

myeve a écrit :


Ba en fait pour 'memoire', je cherche a appeler mon vector pour qu'il me stocke mon element..

dans ta classe MonCanvas tu as fais une méthode addElement, et après tu accède directement au Vector (private qui plus est) sans utiliser cette méthode... c'est assez bizarre.
Sinon +1 avec -- pour l'interface Dessinable. Je me replonge dans ton code, j'espere que WhatDe passera par ici il pourra surement t'aider.


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 12-12-2004 à 13:17:57   

Reply

Marsh Posté le 12-12-2004 à 13:24:04    

N'empeche je comprends toujours pas comment tu peux accéder à memoire depuis un Ecouteur3...


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 12-12-2004 à 13:27:15    

oui je suis d'accord, je ne peux surement pas acceder a memoire dans mon Ecouteur3, mais comment utiliser le vecteur pour stocker mon rectangle afin de l'afficher ?
 
Sinon j'ai mis public Vector memoire = new Vector(); dans ma class 'MonCanvas' et ca ne change rien..

Reply

Marsh Posté le 12-12-2004 à 13:35:09    

R3g a écrit :

N'empeche je comprends toujours pas comment tu peux accéder à memoire depuis un Ecouteur3...

t'as acces au membres privés d'une classe depuis une inner class..


Message édité par the real moins moins le 12-12-2004 à 13:35:17

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 12-12-2004 à 13:39:06    

the real moins moins a écrit :

t'as acces au membres privés d'une classe depuis une inner class..

Mais Ecouteur3 n'est pas une inner class, ou c'est mes yeux qui deconnent ?


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 12-12-2004 à 13:45:39    

R3g a écrit :

Mais Ecouteur3 n'est pas une inner class, ou c'est mes yeux qui deconnent ?


Tu confonds inner et nested. Une nested class (ou member class) est "inner", tout comme le sont les "anonymous" et "local" classes.
Une classe définie dans le même fichier qu'une classe "publique" verra donc ses membres private. Il me semble.


Message édité par Lam's le 12-12-2004 à 13:46:34
Reply

Marsh Posté le 12-12-2004 à 13:48:17    

Bon pour ce qui est du repaint () en general il faut faire un validate () ou un revalidate () pour demander à redessiner...

Reply

Marsh Posté le 12-12-2004 à 13:53:38    

Lam's a écrit :

Tu confonds inner et nested. Une nested class (ou member class) est "inner", tout comme le sont les "anonymous" et "local" classes.
Une classe définie dans le même fichier qu'une classe "publique" verra donc ses membres private. Il me semble.

pfiou, j'ai eu peur un moment, je retombais plus sur le nom "nested", du coup j'etais plus sur de moi [:joce]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 12-12-2004 à 13:54:30    

Ah parce que tout ça c'est le même fichier ?


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 12-12-2004 à 14:05:46    

oui tout est dans le meme fichier..
je verrais ensuite pour separer..

Reply

Marsh Posté le 12-12-2004 à 14:10:32    

Et écrire un code qui compile déjà, ça te branche pas ?

Reply

Marsh Posté le 12-12-2004 à 14:13:59    

ba en fait ca compile et ca se lance, j'ai retiré qq trucs qui ne me paraissaient pas necessaires pour mon probleme, je voulais pas vous embeter avec le code complet..
Je pensais que ca servirait a rien...

Reply

Marsh Posté le 12-12-2004 à 14:25:47    

alerim a écrit :

Et écrire un code qui compile déjà, ça te branche pas ?

et arreter de rouler des mécaniques, ça te branche? ça compile.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 12-12-2004 à 15:54:24    

Désolé je suis un peu perdue, si je mets :
 

Code :
  1. Rectangle r2 = new Rectangle(20,10);
  2. d1.addelement(r2);


 
dans mon constructeur 'Fenetre', en dessous de :

Code :
  1. MonCanvas d1 = new MonCanvas(); 
  2. add("Center",d1);


 
Il m'affiche bien le rectangle, mais si mets cette partie de code dans :

Code :
  1. public static void main( String args[] ) { 
  2.    Fenetre f = new Fenetre(); 
  3. }


 
Il me met en erreur:

Code :
  1. Compiling 1 source file to C:\Documents and Settings\Administrateur\JavaApplication1\build\classes
  2. C:\Documents and Settings\Administrateur\JavaApplication1\src\javaapplication1\Fenetre.java:84: non-static variable this cannot be referenced from a static context
  3.             Rectangle r2 = new Rectangle(20,10);
  4. C:\Documents and Settings\Administrateur\JavaApplication1\src\javaapplication1\Fenetre.java:85: cannot find symbol
  5. symbol  : variable d1
  6. location: class javaapplication1.Fenetre
  7.             d1.addelement(r2);
  8. Note: C:\Documents and Settings\Administrateur\JavaApplication1\src\javaapplication1\Fenetre.java uses unchecked or unsafe operations.
  9. Note: Recompile with -Xlint:unchecked for details.
  10. 2 errors
  11. BUILD FAILED (total time: 0 seconds)


Alors je ne peux pas compiler ..
 
C'est normal ca ?


Message édité par myeve le 12-12-2004 à 15:57:02
Reply

Marsh Posté le 12-12-2004 à 15:56:21    

ben oui; lis les messages d'erreurs.
 
 
au fait t'as essayé le (re)validate() à la place de repaint() ?
(comme suggeré par patachou)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 12-12-2004 à 16:04:52    

Alors j'ai modifié mon bouton Ecouteur3:
 

Code :
  1. class Ecouteur3 implements ActionListener {
  2.     public void actionPerformed(ActionEvent e){
  3.         MonCanvas d2 = new MonCanvas();
  4.         add("Center",d2);
  5.         Rectangle r3 = new Rectangle(30,30);
  6.         d2.addelement(r3);
  7.         //d2.paint();
  8.         validate();
  9.        
  10.     }
  11. }


 
Alors si j'utilise 'validate()', ca ne change rien par rapport à 'd2.paint()'
 
C'est le fait de mettre 'd2.addelement(r3)' qui permet d'aller lancer le paint, car il rentre dans la boucle de ma methode 'paint' avec 'd2.addelement(r3);'


Message édité par myeve le 12-12-2004 à 16:05:33
Reply

Marsh Posté le 12-12-2004 à 16:28:30    

Bon j'ai avancé:
 
j'ai mis mes Ecouteurs dans ma classe Fenetre principale:
 

Code :
  1. class Fenetre extends Frame { 
  2.    
  3.     Fenetre(){ 
  4.         super ("Fenetre" ); 
  5.         setSize(800, 600); 
  6.        
  7.         //Traitement de la fermeture de la fenetre   
  8.         addWindowListener( new WindowAdapter(){ 
  9.             public void windowClosing(WindowEvent e){ 
  10.                 System.exit(0); 
  11.             } 
  12.         }); 
  13.        
  14.         /* Bordure de la fenetre */ 
  15.         setLayout(new BorderLayout()); 
  16.        
  17.         /* Partie centrale, Canvas */ 
  18.         //MonCanvas d1 = new MonCanvas();   
  19.         //add("Center",d1);   
  20.        
  21.         /* Panel du bas de la fenetre */ 
  22.         Panel p = new Panel(); 
  23.         add("South",p); 
  24.         //Bouton quit   
  25.         Button quit = new Button("Quitter" ); 
  26.         p.add(quit); 
  27.         quit.addActionListener(new Ecouteur2()); 
  28.         //Bouton rectangle   
  29.         Button rectangle = new Button("Rectangle" ); 
  30.         p.add(rectangle); 
  31.         rectangle.addActionListener(new Ecouteur3()); 
  32.         //Fenetre visible   
  33.         setVisible(true); 
  34.     } 
  35.    
  36.     public static void main( String args[] ) { 
  37.             Fenetre f = new Fenetre(); 
  38.      } 
  39. class Ecouteur2 implements ActionListener { 
  40.     public void actionPerformed(ActionEvent e){ 
  41.         System.exit(0); 
  42.     } 
  43. }
  44. class Ecouteur3 implements ActionListener { 
  45.     public void actionPerformed(ActionEvent e){ 
  46.         MonCanvas d2 = new MonCanvas();
  47.         d2.setBackground(Color.white);
  48.         add("Center",d2);
  49.         Rectangle r3 = new Rectangle(20,30);
  50.         d2.addelement(r3);
  51.         validate();   
  52.      } 
  53. }
  54. }


 
Or dans ce cas, lorsque je clique sur mon bouton 'Rectangle', il m'affiche bien le rectangle comme demandé.
 
Mais j'ai commenté la partie dans ma classe 'Fenetre':
//MonCanvas d1 = new MonCanvas();  
//add("Center",d1);  
 
Car sinon le rectangle ne s'affiche pas, et ca c'est embetant.  
 
Or si je clique plusieurs fois sur le bouton, il devrait stocker ca dans le vecteur nan ?
Alors que la il ne garde toujours que le dernier...


Message édité par myeve le 12-12-2004 à 16:29:14
Reply

Marsh Posté le 12-12-2004 à 16:30:02    

J'aime deja beaucoup plus. Une petite question : tu penses appeler la methode validate() de quel objet au juste ?


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 12-12-2004 à 16:31:50    

ba en fait je vois pas a quoi ca correspond validate ?

Reply

Marsh Posté le 12-12-2004 à 16:35:08    

Ah si ok, si je le mets pas ya rien qui s'affiche ;)
 
Mais le probleme, si je clique deux fois dessus, le vector n'a pas gardé l'ancien ..

Reply

Marsh Posté le 12-12-2004 à 16:44:51    

myeve a écrit :

ba en fait je vois pas a quoi ca correspond validate ?

-> tuto + javadoc [:itm]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 12-12-2004 à 21:20:27    

Bon en tout cas merci a tout le monde, j'ai enfin resussi et fini ce que je voulais faire, je le mets pour ceux que ca interesse de savoir ce que je voulais vraiment ;)
 
Ce programme marche!  
 

Code :
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import com.sun.java.swing.*;
  4. import java.util.*;
  5. /* -----------------------------------------------------------------------*
  6. Classe principale qui dérive de 'Frame'
  7. --------------------------------------------------------------------------*/
  8. class JavaTD3 extends Frame {
  9.     MonCanvas d1;
  10.    
  11.     public Fen(){
  12.         super ("Java: Fenetre" );
  13.         setSize(800, 600);
  14.         setBackground(Color.lightGray);
  15.        
  16.         /* Bordure de la fenetre */
  17.         setLayout(new BorderLayout());
  18.        
  19.         /* Partie centrale, Canvas */
  20.         d1 = new MonCanvas();
  21.         add("Center",d1);
  22.        
  23.         /* Panel du bas de la fenetre */
  24.         Panel p = new Panel();
  25.         add("South",p);
  26.        
  27.         //Bouton Redessiner
  28.         Button repaint = new Button("Redessine" );
  29.         p.add(repaint);
  30.         repaint.addActionListener(new ActionListener() {
  31.  public void actionPerformed(ActionEvent e) {
  32.   d1.clearScreen();
  33.   repaint();
  34.  }
  35. });
  36.        
  37.         //Bouton quit
  38.         Button quit = new Button("Quitter" );
  39.         p.add(quit);
  40.         quit.addActionListener(new ActionListener() {
  41.  public void actionPerformed(ActionEvent e) {
  42.   System.exit(0);
  43.  }
  44. });
  45.        
  46.         //Bouton rectangle
  47.         Button rectangle = new Button("Rectangle" );
  48.         p.add(rectangle);
  49.         rectangle.addActionListener(new ActionListener() {
  50.  public void actionPerformed(ActionEvent e) {
  51.   ajouteRectangle();
  52.   repaint();
  53.  }
  54. });
  55.        
  56.         //Bouton ellipse
  57.         Button ellipse = new Button("Ellipse" );
  58.         p.add(ellipse);
  59.         ellipse.addActionListener(new ActionListener() {
  60.  public void actionPerformed(ActionEvent e) {
  61.   ajouteEllipse();
  62.   repaint();
  63.  }
  64. });
  65.         //Bouton cercle
  66.         Button cercle = new Button("Cercle" );
  67.         p.add(cercle);
  68.         cercle.addActionListener(new ActionListener() {
  69.  public void actionPerformed(ActionEvent e) {
  70.   ajouteCercle();
  71.   repaint();
  72.  }
  73. });
  74.        
  75.         //Bouton carré
  76.         Button carre = new Button("Carré" );
  77.         p.add(carre);
  78.         carre.addActionListener(new ActionListener() {
  79.  public void actionPerformed(ActionEvent e) {
  80.   ajouteCarre();
  81.   repaint();
  82.  }
  83. });
  84.        
  85.         //Fenetre visible
  86.         setVisible(true);
  87.     }
  88.     //fonction qui renvoir un nb aleatoire et prend en parametre la valeur maximum du nombre aleatoire
  89.     int getRandom(int max){
  90.         int x;
  91.         x = (int)Math.floor(Math.random()*max);
  92.         return x;
  93.     }
  94.     /* Actions sur les boutons */
  95.     void ajouteRectangle() {
  96.  Rectangle rect = new Rectangle(getRandom(800),getRandom(600));
  97.                 rect.setColor("black" );
  98.                 rect.setOrigine(getRandom(700),getRandom(500));
  99.                 d1.addelement(rect);
  100.     }
  101.    
  102.     void ajouteEllipse() {
  103.  Ellipse el = new Ellipse(getRandom(800),getRandom(600));
  104.                 el.setColor("red" );
  105.                 el.setOrigine(getRandom(700),getRandom(500));
  106.                 d1.addelement(el);
  107.     }
  108.    
  109.     void ajouteCercle() {
  110.  Cercle ce = new Cercle(getRandom(800));
  111.                 ce.setColor("green" );
  112.                 ce.setOrigine(getRandom(700),getRandom(500));
  113.                 d1.addelement(ce);
  114.     }
  115.    
  116.     void ajouteCarre() {
  117.  Carre ca = new Carre(getRandom(800));
  118.                 ca.setColor("blue" );
  119.                 ca.setOrigine(getRandom(700),getRandom(500));
  120.                 d1.addelement(ca);
  121.     }
  122.    
  123.     /* fonction main */
  124.     public static void main( String args[] ) {
  125.             Fen f = new Fen();
  126.     }
  127.    
  128.     public void paint(Graphics g) {
  129.  d1.repaint();
  130. }
  131. }
  132. /* -----------------------------------------------------------------------*
  133. Liste des autres classes
  134. --------------------------------------------------------------------------*/
  135. abstract class FigureGeometrique implements Coloriable, Dessinable {
  136.    
  137.     int originx = 0;
  138.     int originy = 0;
  139.    
  140.     private String Couleur;
  141.     public void setColor(String c){
  142.         Couleur = c;
  143.     }
  144.     public Color getColor(){
  145.         if (Couleur.equals("red" )) return Color.red;
  146.         else if (Couleur.equals("blue" )) return Color.blue;
  147.         else if (Couleur.equals("green" )) return Color.green;
  148.         else return Color.black;
  149.     }
  150.    
  151.     abstract void affiche();
  152.    
  153.     void setOrigine(int x, int y){
  154.         originx = x;
  155.         originy = y;
  156.     }
  157.    
  158.     FigureGeometrique(){
  159.         //String nom;
  160.         //int largeur,longueur;
  161.     }
  162.    
  163. } //Fin classe FigureGeometrique
  164. class Rectangle extends FigureGeometrique implements Mesurable, Dessinable {
  165.    
  166.     int longueur,largeur;
  167.    
  168.     //interface Mesurable
  169.     public double aire(){
  170.         return (largeur*longueur);
  171.     }
  172.     public int largeur(){
  173.         //if (l.largeur > largeur) return l; else return this;
  174.         return largeur;
  175.     }
  176.     public int hauteur(){
  177.         return longueur;
  178.     }
  179.    
  180.     //interface Dessinable
  181.     public void dessine(Graphics g){
  182.         g.setColor(this.getColor());
  183.         g.drawRect(originx, originy , largeur , longueur);
  184.    }
  185.    
  186.     Rectangle(int x, int y){
  187.         largeur = x;
  188.         longueur = y;
  189.     }
  190.    
  191.     Rectangle(){
  192.         largeur=10;
  193.         longueur=10;
  194.     }
  195.    
  196.     void agrandir(int z){
  197.         largeur *= z;
  198.         longueur *= z;
  199.     }
  200.    
  201.     void affiche(){
  202.         System.out.println("Rectangle de dimensions "+largeur+", "+longueur+" centre en "+originx+","+originy);
  203.     }
  204. }
  205. class Carre extends Rectangle {
  206.    
  207.     Carre(int c){
  208.         super(c,c);
  209.     }
  210.    
  211.     Carre(){
  212.         longueur = largeur = 100;
  213.     }
  214.    
  215.     void affiche(){
  216.         System.out.println("Carre de cote "+largeur+" centre en "+originx+","+originy);
  217.     }
  218. }
  219. class Ellipse extends FigureGeometrique implements Mesurable, Dessinable {
  220.    
  221.     int longueur, largeur;
  222.    
  223.     //interface Mesurable
  224.     public double aire(){
  225.         double PI = 3.14;
  226.         return (PI * largeur * longueur);
  227.     }
  228.     public int largeur(){
  229.         return largeur;
  230.     }
  231.     public int hauteur(){
  232.         return longueur;
  233.     }
  234.    
  235.     //interface Dessinable
  236.     public void dessine(Graphics g){
  237.         g.setColor(this.getColor());
  238.         g.drawOval(originx, originy, largeur, longueur); 
  239.     }
  240.    
  241.     Ellipse(int x, int y){
  242.         largeur = x;
  243.         longueur = y;
  244.     }
  245.    
  246.     Ellipse(){
  247.         largeur = 10;
  248.         longueur = 10;
  249.     }
  250.    
  251.     void agrandir(double z){
  252.         largeur *= z;
  253.         longueur *= z;
  254.     }
  255.    
  256.     void affiche(){
  257.         System.out.println("Ellipse de rayons "+largeur+", "+longueur+" centree en "+originx+","+originy);
  258.     }
  259. }
  260. class Cercle extends Ellipse {
  261.    
  262.     Cercle(int r){
  263.         super(r,r);
  264.     }
  265.    
  266.     Cercle(){
  267.         largeur = longueur = 50;
  268.     }
  269.    
  270.     void affiche(){
  271.         System.out.println("Cercle de rayon "+largeur+" centre en "+originx+","+originy);
  272.     }
  273. }
  274. /* -----------------------------------------------------------------------*
  275. Liste des interfaces
  276. --------------------------------------------------------------------------*/
  277. interface Mesurable{
  278. double aire();
  279. int largeur();
  280. int hauteur();
  281. }
  282. interface Coloriable{
  283. void setColor(String Couleur);
  284. Color getColor();
  285. }
  286. interface Dessinable {
  287.     public void dessine(Graphics g);
  288. }
  289. /* -----------------------------------------------------------------------*
  290. Classe Canvas, 'MonCanvas', partie centrale
  291. --------------------------------------------------------------------------*/
  292. class MonCanvas extends Canvas{
  293.    
  294.     Vector memoire = new Vector(); // Creation vecteur
  295.    
  296.     MonCanvas(){
  297.         super();
  298.         setBackground(Color.white);
  299.     }
  300.    
  301.     //Ajout d'element dans le vecteur memoire
  302.     public void addelement(Dessinable d) {
  303.         memoire.add(d);
  304.     }
  305.     //Efface l'ecran pour redessiner
  306.     public void clearScreen() {
  307.  memoire = new Vector();
  308. }
  309.    
  310.     //on dessine les objets
  311.     public void paint(Graphics g){
  312.        int index = 0;
  313.         while(index < memoire.size()) {
  314.             ((Dessinable)memoire.elementAt(index)).dessine(g);
  315.             index++;
  316.         }
  317.     }
  318. }

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed