//hier irgendwelche Imports
/**
* Diese Klasse stellt ein GUI-Fenster bereit, in dem eine Bitmap dargestellt
* und auf Pixel-Ebene manipuliert werden kann.
*
* Die dargestellte Bitmap wird bei einer Groessenaenderung automatisch skaliert.
*
* @author pscb
* @version 0.1
*/
public class ImageFrame {
private static final int FRAME_DEFAULT_WIDTH = 800;
private static final int FRAME_DEFAULT_HEIGHT = 600;
private int bufferedimage_width;
private int bufferedimage_height;
private JPanel drawPanel;
private BufferedImage img;
private Graphics img_graphics;
private Object mouseClicked = new Object();
/**
* Erzeugt ein GUI-Fenster zur Darstellung und Manipulation einer Bitmap
* in einer vorgegebenen Standardgroesse. Die angelegte Bitmap besteht nur
* aus weissen Pixeln.
*
* @param title Titel des GUI-Fensters
*/
public ImageFrame(String title) {
this(title, FRAME_DEFAULT_WIDTH, FRAME_DEFAULT_HEIGHT);
}
/**
* Erzeugt ein GUI-Fenster in waehlbarer Groesse zur Darstellung und Manipulation
* einer Bitmap. Die angelegte Bitmap besteht nur aus weissen Pixeln. Die Groesse
* der Bitmap ergibt sich automatisch aus der Groesse des GUI-Fensters
*
* @param title Titel des GUI-Fensters
* @param frame_width Breite des GUI-Fensters
* @param frame_height Hoehe des GUI-Fensters
*/
public ImageFrame(String title, int frame_width, int frame_height) {
JFrame frame = new JFrame(title);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(frame_width, frame_height);
drawPanel = new JPanel(false) {
private static final long serialVersionUID = 1L;
public void paint(Graphics g) {
super.paint(g);
if (img != null) {
g.drawImage(img, 0, 0, getWidth(), getHeight(), null);
}
}
};
frame.add(drawPanel);
drawPanel.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
synchronized (mouseClicked) {
mouseClicked.notify();
}
}
});
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation((d.width - frame.getSize().width) / 2,
(d.height - frame.getSize().height) / 2);
frame.setVisible(true);
bufferedimage_width = drawPanel.getWidth();
bufferedimage_height = drawPanel.getHeight();
img = new BufferedImage(bufferedimage_width, bufferedimage_height,
BufferedImage.TYPE_INT_RGB);
img_graphics = img.getGraphics();
img_graphics.setColor(Color.WHITE);
img_graphics.fillRect(0, 0, bufferedimage_width, bufferedimage_height);
frame.repaint();
}
/**
* Liefert die Breite der Bitmap zurueck.
*
* @return Breite der Bitmap
*/
public int getWidth() {
return bufferedimage_width;
}
/**
* Liefert die Hoehe der Bitmap zurueck.
*
* @return Hoehe der Bitmap
*/
public int getHeight() {
return bufferedimage_height;
}
/**
* Setzt ein Pixel der Bitmap auf die angegebene Farbe.
*
* Die x-Koordinaten der Pixel reichen von 0 bis <code>getWidth() - 1</code>.
* Die y-Koordinaten der Pixel reichen von 0 bis <code>getHeight() - 1</code>.
*
* Die Koordinate (0,0) befindet sich in der linken oberen Ecke der
* dargestellten Bitmap.
*
* @param x x-Koordinate des Pixels
* @param y y-Koordinate des Pixels
* @param c neue Farbe des Pixels
*/
public void setPixel(int x, int y, Color c) {
img_graphics.setColor(c);
img_graphics.drawLine(x, y, x, y);
drawPanel.repaint();
}
/**
* Wartet, bis eine Mausklick in die dargestellte Bitmap im GUI-Fenster erfolgt.
*/
public void waitMouseClicked() {
try {
synchronized (mouseClicked) {
mouseClicked.wait();
}
} catch (InterruptedException e) {
}
}
}