# Zeichnung mit der Maus bewegen



## Guest (21. Apr 2008)

Hallo,

hab mal eine typische Anfängerfrage in Sachen Grafikprogrammierung.

Wie kann man folgendes Beispiel sinnvoll programmieren?

Ich habe einen Ball, der soll immer da gemalt werden wo die Maus ist, sobald ich klicke bleibt er an dieser Stelle.


Die Maus-Technik ist mir bekannt, allerding wie male ich das Ganze???

Benötige ich dafür 2 Images, praktich 1 mal für alle gemalten,  1 mal als "Vorschau" für die Maus???

Es muss ja bei jeder Mausbewegung neu gemalt werden, aber das braucht doch sehr viel Speicher oder?

Vielen Dank


----------



## ARadauer (21. Apr 2008)

> Benötige ich dafür 2 Images, praktich 1 mal für alle gemalten, 1 mal als "Vorschau" für die Maus???
> 
> Es muss ja bei jeder Mausbewegung neu gemalt werden, aber das braucht doch sehr viel Speicher oder?


nein, du erstellt ja nicht x images.

du hast eine JComponent oder ein JFrame in dem du die paint Methode überschreibst. darin zeichnest du deinen kreis. wird die maus bewegt, änderst du die koordinaten von deinem kreis und rufst ein repaint auf, dann wird der kreis neu gezeichent (paint methode) wann und  wie oft diese methode aufgerufen wird, das entscheidet java....


----------



## Maeher (21. Apr 2008)

Anonymous hat gesagt.:
			
		

> Es muss ja bei jeder Mausbewegung neu gemalt werden, aber das braucht doch sehr viel Speicher oder?


Naja, häufiges Neuzeichen erhöht den Speicherverbrauch nicht unbedingt.
Ich würde für diese Aufgabe bei Klicks in ein BufferedImage zeichnen und bei Mausbewegungen die aktuellen Koordinaten ermitteln und repaint() aufrufen. In deiner Zeichenmethode zeichnest du dann dein aktuelles Hintergrundbild und deinen Ball.
Die Vorschau jedes Mal zuerst manuell in ein Bild zu zeichnen lohnt sich normalerweiße nicht (zumindest Swing macht das intern automatisch um Flackern zu vermeiden).


----------



## ARadauer (21. Apr 2008)

```
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;

public class Test extends JFrame implements MouseMotionListener{
	
	int xPos = 0;
	int yPos = 0;
	int radius = 20;
	
	@Override
	public void paint(Graphics g) {
		super.paint(g);
		g.drawOval(xPos-radius/2, yPos-radius/2, radius, radius);
	}
	public static void main(String[] args){
		Test t = new Test();
		t.addMouseMotionListener(t);
		t.setSize(500,500);
		t.setVisible(true);
	}


	public void mouseMoved(MouseEvent e) {
		xPos =e.getX();
		yPos = e.getY();
		repaint();
	}
	
	public void mouseDragged(MouseEvent e) {
				
	}
}
```
ein kleines beispiel


----------

