Utiliser 2 canvas l'un par dessus l'autre ?

Fermé
winalbest - 25 oct. 2003 à 16:56
 winalbest - 29 oct. 2003 à 18:49
Bonjour, j'aurais vraiment besoin d'un peu d'aide.
Dans mon code suivant, je dessine des images sur un canvas. Je veux pourvoir déplacer ces images avec la souris, j'ai donc refait une autre classe héritant de canvas destinée à stocker les images. Le problème est que je ne sais pas commetn dessiner ces images sur le canvas et faire en sorte ensuite que quand je clique sur l'image, ce soit l'évènement MouseDown de li'mage qui soit appelé et non celui du canvas de fond.
voici la partie de mon code concernée :

  // Classe pour la zone de dessin ou l'on place les icones
  class Dessin extends Canvas {
    private ArrayList Liste = new ArrayList();

    Dessin() {
      setBackground(Color.blue);
    }

    public void paint(Graphics g) {
      //permet d'afficher les elements de la liste (liste.size() = taille de la liste)
      //JOptionPane.showMessageDialog(null,"okadoka");
      //for (int i = 0; i < Liste.size(); i++) {
      //transtypage obligatoire (les elements de la liste sont de type Object)
      //( (Icon) Liste.get(i)).paintIcon(null, getGraphics(), 60, 60);
    }

    public void Ajout(Icon icon) {
      Icone MeIcon = new Icone(icon);
      MeIcon.paint(getGraphics());
      //icon.paintIcon(null, getGraphics(), 300, 200);
      Liste.add(icon);
    }

    public boolean mouseDown(Event e, int x, int y) {
      //JOptionPane.showMessageDialog(null,"okidoki");
    return true;
    }
  }

//------------------------------------------------------------------------------


  class Icone extends Canvas{
    private Icon icon;
    boolean draggable=true;
    boolean beingDragged=true;
    private int width=600, height=400;
    /** Should the image be highlighted when you click/drag? Default = true. */
    public boolean highlightable = true;

    Icone(Icon icon){this.icon=icon;}
    public void paint(Graphics g){
      JOptionPane.showMessageDialog(null,"okidoki");
      //icon.paintIcon(null, g, 0, 0);
      Image img=Toolkit.getDefaultToolkit().getImage("C:\\Documents and Settings\\Al\\jbproject\\EssaiGraph\\classes\\monvafl.jpg");
      Graphics gc=getGraphics();
      gc.drawImage(img,40,40,this);
    }

    public boolean mouseDown(Event e, int x, int y) {
      JOptionPane.showMessageDialog(null,"okidoka");
      if (draggable && contains(x, y)) {
        beingDragged = true;
        if (highlightable)
          repaint();
        return (true);
      }
      else
        return (false);
    }


Aidez moi svp.
Merci
A voir également:

5 réponses

tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
26 oct. 2003 à 10:40
tout d'abord dessiner un objet sur un canvas, c'est ajouter l'objet au canvas et bien sur l'objet possede la methode paint.
Donc, si tu veux deplacer l'objet, il suffit juste de changer les positions et d'appeler la methode repaint ou update, je ne sais plus.

RM: tu peux ajouter autant de canvas que tu veux sur un autre canvas, il n'ya pas a priori de limites theoriques.
ex: Canvas c= new Canvas();
canvas d = new canvas();
canvas e = new canvas;
d.add(e);
c.add(d);
etc..

tafiscobar
0
Canvas d = new Canvas();
Canvas f = new Canvas();
d.add(f);
c.add(d);

Non ca ne amrche pas justement, on ne peut pas ajouter autre chose qu'un popumenu apparement...je crois qu'on est obligé de le dessiner nous même...non ?
0
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
28 oct. 2003 à 13:23
j'avais ouble que l'on ne peut ajouter qu'un popupmenu sur un canvas. En fait canvas c'est pour dessiner et donc tu l'utilises pour dessiner un objet et coe je te l'ai dit plus haut -avant de dire les betises avec la remarque-, tu changes juste les coordonnes de ton objet au mousemove et tu le redessine en appelant la methode update ou repaint, je ne sais plus c'est lequel.
ie tu cree ton mouseMotionListener et tu l'ajoutes au canvas par la methode addMouseMotionListener

tafiscobar
0
Ok mais quel est la canvas qui doit implémenter MouseListener, le canvas d'arrière plan ou les autres canvas d'avant plan qui sont en fait des images ?
Merci
0
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
29 oct. 2003 à 16:29
regaedes, c'est mal conçu, tout d'abord dessin ne le fait pas etendre canvas, il faut creer une classe par exemple :
class CanvasDessin extends Canvas {
Dessin d;
CanvasDessin(Dessin d) { this.d = d ;}
void paint(Graphics g) { d.paint(g);}

et puis donnes moi ton mail et je t'envoies un projet qu'un camarade de classe a deja fait et la conception est bien faite et c'est de ce genre, c'est lui qui m'a donne l'idee de t'envoyer un prototype, lemien je ne l'ai pas sur moi et le sien est plus beau et mieux explique.

tafiscobar
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ok, merci.
Voici mon mail : winalbest@ifrance.com
0