import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
public class ZeichnungJFrame2 extends JFrame
{
public static void main(String args[])
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
ZeichnungJFrame2 zjf = new ZeichnungJFrame2();
zjf.pack();
zjf.setVisible(true);
}
});
}
private ZeichnungJPanel spielJPanel;
public ZeichnungJFrame2()
{
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JPanel centerPanel = new JPanel();
centerPanel.setBackground(new Color(255, 255, 204));
centerPanel.setBorder(
BorderFactory.createCompoundBorder(
BorderFactory.createEmptyBorder(10,10,10,10),
BorderFactory.createLineBorder(new Color(0, 0, 0))));
centerPanel.setLayout(new BorderLayout());
spielJPanel = new ZeichnungJPanel();
centerPanel.add(spielJPanel);
getContentPane().add(centerPanel);
}
}
class ZeichnungJPanel extends javax.swing.JPanel
{
private BufferedImage bildKonstanterTeil;
private Point etwasVeränderliches = new Point();
public ZeichnungJPanel()
{
setBackground(new Color(204, 255, 204));
setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0)));
setPreferredSize(new Dimension(200, 200));
addMouseMotionListener(new MouseMotionAdapter()
{
public void mouseDragged(MouseEvent evt)
{
mouseUpdate(evt);
}
public void mouseMoved(MouseEvent evt)
{
mouseUpdate(evt);
}
});
setLayout(new BorderLayout());
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
System.out.println("Zeichne...");
zeichneKonstantenTeil(g);
zeichneVeränderlichenTeil(g);
}
public void zeichneKonstantenTeil(Graphics g)
{
aktualisiereKonstantenTeilFallsNotwendig();
g.drawImage(bildKonstanterTeil, 0, 0, null);
}
public void aktualisiereKonstantenTeilFallsNotwendig()
{
int sx = getWidth();
int sy = getHeight();
if (bildKonstanterTeil == null ||
bildKonstanterTeil.getWidth() != sx ||
bildKonstanterTeil.getHeight() != sy)
{
bildKonstanterTeil = new BufferedImage(
sx, sy, BufferedImage.TYPE_INT_ARGB);
System.out.println("Größe hat sich geändert");
System.out.println("Neue Größe: "+getSize());
System.out.println("aktualisiereKonstantenTeil!");
Graphics g = bildKonstanterTeil.createGraphics();
aktualisiereKonstantenTeil(g, Color.black);
g.dispose();
}
}
private void aktualisiereKonstantenTeil(Graphics g, Color farbe)
{
int sx = getWidth();
int sy = getHeight();
g.setColor(getBackground());
g.fillRect(0, 0, sx, sy);
g.setColor(farbe);
for (int x = 1; x < 200; x++)
{
g.drawLine(x, x * x, x + 1, (x + 1) * (x + 1));
}
}
public void zeichneVeränderlichenTeil(Graphics g)
{
int x = etwasVeränderliches.x;
int y = etwasVeränderliches.y;
g.drawLine(x-10, y-10, x+10, y+10);
g.drawLine(x+10, y-10, x-10, y+10);
}
private void mouseUpdate(MouseEvent evt)
{
etwasVeränderliches = evt.getPoint();
repaint();
}
}