Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème exercice interface graphique

    13 janvier 2011 à 18:05:10

    Bonsoir j'ai un problème dans un exercice:
    Je possède une classe Cercle déjà toute faite que je ne peux modifier. Cette classe permet de creer des cercles en fonction de la position de la souris et d'un diamètre horizontal et vertical. Ces cercles seront affiché dans un pannel graphe.

    voici cette classe :
    package janvier_2009;
    
    import java.util.*;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.Color;
    
    public class Cercle
    {
      protected int col;
      protected int lig;
      protected int lh;
      protected int lv;
    
      protected Color cTrait;
    
      public Cercle(int col, int lig, int lh, int lv)
      {
        this.col = col;
        this.lig = lig;
        this.lh = lh;
        this.lv = lv;
    
        cTrait = Color.BLACK;
      }
    
      public Cercle(int col, int lig, int lh, int lv, Color cTrait)
      {
        this.col = col;
        this.lig = lig;
        this.lh = lh;
        this.lv = lv;
    
        this.cTrait = cTrait;
      }
    
      public void dessine (Graphics g)
      {
        g.setColor(cTrait);
        g.drawOval(col,lig,lv,lh);
      }
    }
    


    Ensuite on me demande de créer la fenètre, la voici:
    package janvier_2009;
    
    import java.awt.*;
    
    import javax.swing.*;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    
    public class Appli extends JFrame
    {
    	private JPanel JP = new JPanel();
    	private Panneau pan = new Panneau();
    
    	public Appli()
    	{
    		
            setTitle("exercice 3");
            setSize(400, 400);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setLocationRelativeTo(null);
    
    	add(pan);
          
    	}
    	
    	
    	public static void main(String[] args) 
    	{
    		Appli a = new Appli();
    		a.setVisible(true);
    	}
    
    }
    


    Ainsi que la classe Panneau de façon à ce que:
    - un clic souris sur le panneau à une position (x,y) crée un cercle à cette position.
    - l'ensemble des cercles tracés est affiché en permanence.

    Voici ce cette classe:
    package janvier_2009;
    
    import java.util.*;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    
    public class Panneau extends JPanel
    {
        private ArrayList<Cercle> liste = new ArrayList<Cercle>();
    
        public Panneau()
        {
          liste = new ArrayList<Cercle>();
    
    
          addMouseListener(new MouseAdapter()
    	{	
    		//gestion du click sur la zone de dessin
    		public void mouseClicked(MouseEvent e)
    		{
    			Cercle flocon = new Cercle(e.getX(), e.getY(), 30, 30);
    			flocon.dessine();
    			liste.add(flocon);
    		}
    	});
        }
        
    }
    


    j'obtient cette erreur:
    Panneau.java:27: dessine(java.awt.Graphics) in janvier_2009.Cercle cannot be applied to ()
                            flocon.dessine();
                                  ^
    1 error


    Ce qui est compréhensible, la méthode dessine de la classe Cercle attend en paramètre un objet de type Graphics.
    Mais je ne sais pas quoi mettre, j'ai essayer d'envoyer mon objet "flocon" mais ça ne marche pas.


    Merci de votre aide!
    • Partager sur Facebook
    • Partager sur Twitter
      13 janvier 2011 à 23:03:13

      public void dessine (Graphics g)
      {
      g.setColor(cTrait);
      g.drawOval(col,lig,lv,lh);
      }


      donc il faut faire flocon.dessine(g) //g etant un objet Graphics, tu l'appelle sans parametre, c'est pas bien ;)
      • Partager sur Facebook
      • Partager sur Twitter
        14 janvier 2011 à 11:22:29

        J'ai essayé comme ça:
        flocon.dessine(g);
        


        Voila ce que j'obtient:
        Panneau.java:27: cannot find symbol
        symbol: variable g
                                flocon.dessine(g);
                                               ^
        1 error


        J'ai essayé comme ceci :
        flocon.dessine(Graphics g);
        


        Voila ce que j'obtient:
        Panneau.java:27: ')' expected
                                flocon.dessine(Graphics g);
                                                       ^
        Panneau.java:27: illegal start of expression
                                flocon.dessine(Graphics g);
                                                         ^
        2 errors
        • Partager sur Facebook
        • Partager sur Twitter
          15 janvier 2011 à 0:40:21

          Excuse moi pour ne pas avoir été clair du tout. Je reprends (mais je me suis servis d'Eclipse, il y a qqchose que je ne comprend pas mais ça marche :/ ) :

          Citation : zmf

          donc il faut faire flocon.dessine(g) //g etant un objet Graphics, tu l'appelle sans parametre, c'est pas bien



          je pensais que tu avais compris, je voulais dire par là :
          il faut que tu récupere un contexte graphics sur lequel il peut dessiner.
          (oui, le g ne sors pas de nul part....)
          il faut donc envoyer à Cercle.dessine le "contexte graphic" là ou il doit dessiner.

          ce que j'ai fait :

          Voici ma nouvelle classe "panneau" (j'ai rajouté App dans lequel il recupere le contexte graphique) :

          public class Panneau extends JPanel
          {
              private ArrayList<Cercle> liste = new ArrayList<Cercle>();
              private Appli app = null;
              
              public Panneau( final Appli app)
              {
                liste = new ArrayList<Cercle>();
                this.app = app;
                addMouseListener(new MouseAdapter()
          	{	
          		//gestion du click sur la zone de dessin
          		public void mouseClicked(MouseEvent e)
          		{
          			Cercle flocon = new Cercle(e.getX(), e.getY(), 30, 30);
          		//	
          			flocon.dessine(app.getGraphics());
          			liste.add(flocon);
          		}
          	});
              }
              
          }
          


          Dans la class Appli (la définition des variables), ajout de "this" (je lui envoie l'objet Appli) :
          private Panneau pan = new Panneau(this);
          



          et ça marche.

          ps : demande à quelqu'un des explications clair :)
          pps : je suis sûr qu'il y a une façon bcp plus élégante de faire mais je ne la trouve pas.
          • Partager sur Facebook
          • Partager sur Twitter

          Problème exercice interface graphique

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown