[AWT] Zeichnungen per Maus auswählen

  • Themenstarter Themenstarter Gelöschtes Mitglied 2635
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Gelöschtes Mitglied 2635

Gast
Hallo zusammen.

Ich möchte gezeichnete Elemente per Mouse auswählen. Die Mouseeinbindung und das Zeichnen ist alles kein Problem. Suche nur einen Ansatz, wie ich bei einem Mouseklick feststelle, ob ich z.B. einen Kreis oder anderes Element angeklickt habe. Kann mir jemand folgen und helfen?


Besten Dank, Der Tino.
 
Du müsstest irgendwo die Koordinaten hinterlegen und mit den MouseEvent-Methoden getX() und getY() die Koordianten eines Klicks feststellen und vergleichen.
 
tinokramm hat gesagt.:
Suche nur einen Ansatz, wie ich bei einem Mouseklick feststelle, ob ich z.B. einen Kreis oder anderes Element angeklickt habe. Kann mir jemand folgen und helfen?
Du kannst ja, die Kreise, Rechtecke... auf einen JButton zeichnen, diesen dann transparent machen, ohne Linie zeichnen, dann merkt man keinen Unterschied. Wenn du allerdings wirklich nur Koordinaten innerhalb des Kreises und nicht außerhalb des Kreises aber innerhalb des JButtons zulassen möchtest, wirst du nicht umhinkommen, dir über den MouseListener --> mouseReleased (z. B.) --> e.getX()... die Koordinaten rückgeben zu lassen.

By<e Ulrich
 
Hi,

das ist im Prinzip ganz einfach. Du repräsentierst jedes Zeichenobjekt (Kreis, Quadrat o.ä.) durch eine Klasse. Diese Klasse kann ne Methode beinhalten (z.B. isInside( MouseEvent e) ) die bei einem Klick überprüft ob die Koordinaten in diesem Objekt liegen. Beim Zeichnen wird ein Objekt der besagten Klasse erzeugt und in ner Speicherstruktur gespeichert.
 
Ist zwar schon älter der Thread, aber ich muss mich nochmal mit der Aufgabe auseinandersetzen. Für ein Quadrat konnte ich solch eine Methode "isMouseInside(MouseEvent e)" entwickeln. Allerdings fällt mir kein gescheiter Lösungsansatz für einen Kreis und ein gleichseiges Dreieck ein. Wie könnte ich das geschickt anstellen?

Code:
	public boolean isMouseInside(MouseEvent e) {
		/** stellt fest, ob eine Mouseklick in der Figur liegt */
		int xm = e.getX();
		int ym = e.getY();		
		if (xm >= x && xm <= x+a && ym >= y && ym <= y+a) return true;		
		return false;
	}

a = Seitenlänge
x,y = Koordinaten der Figur
xm, ym = temp. Koordinaten des Mouseklicks
 
benutze doch die java.awt.geom klassen, dann brauchst du dir deinen kopf nicht über höhere mathematik zu zerbrechen sondern nimmst einfach #contains(x, y) um zu überprüfen 😉
 
Vielen Dank für den genialen Tipp. Habe das für den Kreis und das Quadrat auch auf Anhieb realisieren können. Nur finde ich unter java.awt.geom keine geeignete Klasse für mein Dreieck, sprich ein Polygon!? Wie soll ich hiermit verfahren?

Code für's Quadrat:

Code:
	public boolean isMouseInside(MouseEvent e) {
		/** stellt fest, ob ein Mausklick in der Figur liegt */
		Rectangle2D tmp = new Rectangle2D.Double(x,y,a,a);
		if (tmp.contains(e.getPoint())) return true;		
		return false;
	}
 
Gibt es da evtl. eine effizientere Methode? Was ist wenn ich 2000 Polygone habe, das Array auf die Koordinaten zu prüfen dauert dann ewig!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben