Zeichnung mit der Maus bewegen

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
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
 
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....
 
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).
 
Code:
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
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben