View Single Post
Old 12-06-2007, 19:57   #1
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
[java] graphics mi disegna sovrapposto!

allora ho un componente che estende JPanel e dovrebbe essere il "contenitore" di un immagine (BufferedImage).

questo componente lo uso dalla applicazione principale, inserito in una scrollpane, dove dovrei aprire diverse immagini (una per volta). Per ogni immagine creo sto coso e lo metto nella scrollpane...e fin qui tutto a posto.

senonchè quando carico alcune (solo alcune non tutte) immagini il componente disegna più immagini, e lo stesso lo fa quando faccio zoom out!

sto impazzendo!


questo è il codice della classe in questione:

Codice:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class ImageComponent extends JPanel implements MouseListener
{
    private BufferedImage img;
    private int w;
    private int h;
    private int cw;
    private int ch;
    private int op;

    public ImageComponent(BufferedImage image) {
        this.addMouseListener(this);
        img = image;
        w = img.getWidth();
        h = img.getHeight();
        cw = w;
        ch = h;
    }

    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        AffineTransform at;
        AffineTransformOp aop;
        switch (op) {
        case 0:
            g.drawImage(img, 0, 0, null);
            break;
        case 1:
            at = AffineTransform.getScaleInstance(2, 2);
            aop = new AffineTransformOp(at, AffineTransformOp.TYPE_BICUBIC);
            g2.drawImage(img, aop, 0, 0);
            break;
        case 2:
            at = AffineTransform.getScaleInstance(0.5, 0.5);
            aop = new AffineTransformOp(at, AffineTransformOp.TYPE_BICUBIC);
            g2.drawImage(img, aop, 0, 0);
            break;
        default:
        }
    }

    public void zoomIn() {
        op = 1;
    }

    public void zoomOut() {
        op = 2;
    }

    public Dimension getPreferredSize() {
        return new Dimension(w, h);
    }

    public void mousePressed(MouseEvent e) {
        if (SwingUtilities.isLeftMouseButton(e)) {
            zoomIn();
        }
        if (SwingUtilities.isRightMouseButton(e)) {
            zoomOut();
        }
        repaint();
    }

    public void mouseReleased(MouseEvent e) {}

    public void mouseClicked(MouseEvent e) {}

    public void mouseEntered(MouseEvent e) {}

    public void mouseExited(MouseEvent e) {}
}
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso