PDA

View Full Version : [java] graphics mi disegna sovrapposto!


Oceans11
12-06-2007, 18:57
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:

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) {}
}

Oceans11
13-06-2007, 13:57
up


nessuno są aiutarmi??? :(

tglman
13-06-2007, 14:15
Il problema penso proprio che sia nel recupero delle dimenzioni del componente!

nn conosco bene ma controllo che sia giusto utilizzare getPreferredSize ...

PGI-Bis
13-06-2007, 14:37
Sposta quello che hai messo in paint in paintComponent. Il paint non toccarlo che fa cose delicate.