Probleme Méthode Paint et ActionListener [Résolu]

Karibou95 13 Messages postés mardi 27 février 2007Date d'inscription 17 octobre 2008 Dernière intervention - 4 oct. 2008 à 10:49 - Dernière réponse : Karibou95 13 Messages postés mardi 27 février 2007Date d'inscription 17 octobre 2008 Dernière intervention
- 4 oct. 2008 à 12:17
Bonjour à tous :)

Voici mon probleme :

J'ai une class Repere_Canavas dans laquelle j'ai la méthode paint, jusqu'a la tout va bien mon canvas s'affiche convenablement et je peux crée des rectangle etc....

A present j'ai une class Bouton_Rectangle qui implements ActionListener, et
grâce à cette class je voudrais que lorque l'on appuis sur mon bouton Bouton_Rectangle un rectangle apparaisse sur mon canvas.

Mais voila il y'a un probleme :'( dans ma méthode paint de la classe Repere_canvas j'ai graphics g donc quand je veux ajouter un rectangle il me suffit de faire g.fillrect(int,int,int,int) mais je ne peux pas faire appelle à g dans ma class Bouton_Rectangle :'(

comment faire ?


P.S : j'ai essayé de faire appelle au constructeur de ma class Repere_Canvas dans ma class Bouton_Repere comme ceci :

Repere_Canvas w = new Repere_Canvas;
w.fillRect(int,int,int,int);
w.setColor(Color.RED);
w.repaint();

mais ça ne marche pas le w n'est pas reconnu.



merci pour vos reponses.
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 4 oct. 2008 à 12:11
3
Merci
Nous pouvons dessiner sur une image et dessiner cette image dans paint. Dans l'exemple suivant, l'objet "Repere_Canvas" est passé au bouton dans son constructeur. "Repere_Canvas" a une méthode getG2d() qui retourne l'objet Graphics2D de l'image. Alors le bouton dessine simplement sur cet objet Graphics2D et appel repaint() pour l'objet "Repere_Canvas".

import java.awt.*;
import java.awt.event.*;

/*
 ***************************************************************
 * Sample program which demonstrates the basic paint
 * callback mechanism in the AWT.
 ***************************************************************
 */
import java.awt.image.BufferedImage;

public class PaintDemo {

    public static void main(String[] args) {
        Frame f = new Frame("PaintDemo");
        f.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        Repere_Canvas panel = new Repere_Canvas(Color.yellow);
        f.add(panel, BorderLayout.CENTER);
        Bouton_Rectangle bt = new Bouton_Rectangle(panel);
        f.add(bt, BorderLayout.NORTH);
        f.pack();
        f.setVisible(true);
    }
}

/**
 * Note: Canvas is a heavyweight superclass, which makes
 * Repere_Canvas also heavyweight.  To convert this class to
 * a lightweight, change "extends Canvas" to "extends Component".
 */
class Repere_Canvas extends Canvas {

    private BufferedImage image;
    private Graphics2D g2d;

    public Repere_Canvas(Color color) {
        setForeground(color);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(300, 300);
    }
    /*
     * Paint when the AWT tells us to...
     */

    @Override
    public void paint(Graphics g) {
        if (image == null) {
            image = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB);
            g2d = (Graphics2D) image.getGraphics();
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                    RenderingHints.VALUE_ANTIALIAS_ON);
            g2d.setColor(getForeground());
        }
        Rectangle r = g.getClipBounds();
        g.drawImage(image, r.x, r.y, r.width + r.x, r.height + r.y,
                r.x, r.y, r.width + r.x, r.height + r.y, null);
    }

    public Graphics getG2d() {
        return g2d;
    }
}

class Bouton_Rectangle extends Button implements ActionListener {

    private Repere_Canvas repere_Canvas;

    public Bouton_Rectangle(Repere_Canvas repere_Canvas) {
        super("Bouton_Rectangle");
        this.repere_Canvas = repere_Canvas;
        addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        Graphics g = repere_Canvas.getG2d();
        g.fillRect(100, 100, 100, 100);
        repere_Canvas.repaint();
    }
}

Merci uhrand 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de uhrand
Karibou95 13 Messages postés mardi 27 février 2007Date d'inscription 17 octobre 2008 Dernière intervention - 4 oct. 2008 à 12:17
0
Merci
merci beaucoup ! l'exemple met tres utilie :)
Commenter la réponse de Karibou95

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.