ImagePanel.java
package ac.essex.ooechs.imaging.commons.util.panels;
import ac.essex.ooechs.imaging.commons.PixelLoader;
import javax.swing.*;
import java.awt.image.BufferedImage;
import java.awt.*;
import java.awt.event.MouseEvent;
/**
* Panel onto which an image can be drawn easily.
*/
public class ImagePanel extends JPanel {
protected int zoom = 1;
protected BufferedImage image;
protected boolean setDisplayCentered = false;
protected boolean scale = false;
public ImagePanel() {}
public ImagePanel(PixelLoader image) {
setImage(image);
}
public void setImage(BufferedImage image) {
this.image = image;
repaint();
}
public void setImage(PixelLoader image) {
setImage(image.getBufferedImage());
}
public BufferedImage getImage() {
return image;
}
public void setDisplayCentered(boolean centered) {
this.setDisplayCentered = centered;
if (!centered) {
offsetX = 0;
offsetY = 0;
}
}
public void setScaling(boolean scale) {
this.scale = scale;
}
protected int offsetX = 0;
protected int offsetY = 0;
public int getOffsetX() {
return offsetX;
}
public int getOffsetY() {
return offsetY;
}
public int getX(MouseEvent e) {
return (e.getX() - offsetX) / zoom;
}
public int getY(MouseEvent e) {
return (e.getY() - offsetY) / zoom;
}
public void drawImage(Graphics g, BufferedImage image) {
if (!scale) {
g.drawImage(image, offsetX, offsetY, image.getWidth() * zoom, image.getHeight() * zoom, this);
} else {
g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
}
}
public void zoomIn() {
zoom *= 2;
if (zoom > 32) zoom = 32;
}
public void zoomOut() {
zoom /= 2;
if (zoom < 1) zoom = 1;
}
public void setImageNull() {
image = null;
}
public void paintComponent(Graphics g) {
if (image != null) {
//super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
if (setDisplayCentered) {
offsetX = (getWidth() - (image.getWidth() * zoom)) / 2;
offsetY = (getHeight() - (image.getHeight() * zoom)) / 2;
}
drawImage(g, image);
} else {
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
}
}
}