package paint;
/*
* Eierfabrik.java
*/
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.net.*;
import javax.swing.*;
public class Eierfabrik extends JFrame {
private BildPanel bildPanel;
private Image bildBuffer;
private Graphics2D bildBufferGraphics;
private Image bildImBild;
private int x1, y1;//Position für bildImBild
private JButton btAdd;
private JButton btClear;
private JToolBar toolBar;
public Eierfabrik() {
super("Eierfabrik benutzt einen Bildpuffer");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(450,460);
setLocationRelativeTo(null);
//ein Bild laden:
System.out.println("Bild wird geladen...");
URL url = null;
try {
url = new URL("http://www.blinde-kuh.de/ostern/mosaik-ei.gif");
} catch (MalformedURLException ex) {
ex.printStackTrace();
}
bildImBild = new ImageIcon(url).getImage().getScaledInstance(100, -1, Image.SCALE_SMOOTH);
//JComponents erzeugen:
toolBar = new JToolBar();
btAdd = new JButton("Eier legen");
btClear = new JButton("Wegräumen");
bildPanel = new BildPanel();
JLabel lb = new JLabel(new ImageIcon(bildImBild));
//Layout:
toolBar.add(btAdd);
toolBar.add(btClear);
getRootPane().setDefaultButton(btAdd);
btClear.setEnabled(false);
getContentPane().add(toolBar, BorderLayout.PAGE_START);
getContentPane().add(bildPanel, BorderLayout.CENTER);
getContentPane().add(lb, BorderLayout.LINE_END);
//Listeners:
btAdd.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent evt) {
btAddActionPerformed(evt);
}
});
btClear.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent evt) {
btClearActionPerformed(evt);
}
});
addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
int w = getWidth();
int h = getHeight();
if(w < 340) w = 340;
if(h < 390) h = 390;
setSize(w, h);
}
});
}
private void btAddActionPerformed(final ActionEvent evt) {
//bildImBild malen:
bildBufferGraphics.drawImage(bildImBild, x1, y1, null);
bildPanel.repaint();
//Position (x1, y1) für nächstes bildImBild errechnen:
int w = 120;
int h = 130;
x1 += w;
if(x1 > w*2){
y1 += h;
x1 = 0;
if(y1 > h*2){
btAdd.setEnabled(false);//Bildpuffer ist jetzt voll Bilder
}
}
btClear.setEnabled(true);//ermöglicht das Entfernen der Bilder aus dem Bildpuffer
}
private void btClearActionPerformed(final ActionEvent evt) {
System.out.println(this+"\n"+bildPanel);
//alle Bilder wieder aus dem Bildpuffer entfernen:
bildBufferGraphics.clearRect(0, 0, getWidth()*1, getHeight()*1);
bildPanel.repaint();
btAdd.setEnabled(true);//ermöglicht das Hinzufügen neuer Bilder im Bildpuffer
x1 = 0;
y1 = 0;
btClear.setEnabled(false);
}
public String toString() {
return "Eierfabrik width: "+getWidth()+" height: "+getHeight();
}
public static void main(final String args[]) {new Eierfabrik().setVisible(true);}
class BildPanel extends JPanel{
protected void paintComponent(final Graphics g) {
super.paintComponent(g);
if(bildBuffer == null){
//Bildpuffer erzeugen:
int w = getWidth();
int h = getHeight();
bildBuffer = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
bildBufferGraphics = (Graphics2D)bildBuffer.getGraphics();
bildBufferGraphics.setBackground(Color.GREEN);
bildBufferGraphics.clearRect(0, 0, w, h);
}
//Bildpuffer malen:
g.drawImage(bildBuffer, 0, 0, getWidth(), getHeight(), null);
}
public String toString() {
return "BildPanel width: "+getWidth()+" height: "+getHeight();
}
}
}