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