MouseListener an Ecken von Polygonen hinzufügen

ttmgot

Mitglied
Hallo,

nachdem die Feiertage jetzt vorbei sind, und man daher wieder Programmieren muss, habe ich mal wieder ein Problem.

ich arbeite gerade mit ein paar Leuten daran, ein Siedler von Catan-Spiel zu programmieren, und dort hat man ein Spielfeld das aus vielen Sechsecken besteht. Wenn nun der Spieler auf eine Ecke oder eine Kante von einem Sechseck drückt, soll nun je nachdem etwas passieren.

Es ist in dem Fall echt schwer einen MouseListener auf das komplette Spielfeld zu legen, und jedes mal anhand der Koordinaten zu prüfen, was angeklickt wurde (Welche Kante mit welchen index oder welche Kreuzung mit welchen index). Jetzt hat ein Kumpel von mir gemeint, er hätte mal irgendwo gehört, dass man an die Ecken von Polygonen zumindest einen Listener anfügen kann. Deswegen habe ich zwar eine Klasse Sechseck programmiert, die von Polygon erbt, aber jetzt bei google dazu absolut nichts gefunden.

Daher wollte ich mal Fragen, ob das jetzt wirklich möglich ist, an die Ecken und Kanten MouseListener hinzuzufügen, oder ob das nur Schwachsinn ist. Und wenn das möglich ist, wie???:L

Hoffe, jemand der sich da besser auskennt weiß ne Lösung. Die Sechseck-Klasse sieht übrigens so aus,
Java:
public class Sechseck extends Polygon{
	
	int[] xpoints, ypoints; 
	int[] kreuzungen;
	
	Spielstand spielstand;

	public Sechseck(int[] xpoints, int[] ypoints, int[] kreuzungen,
			Spielstand spielstand) {
		super(xpoints, ypoints, 6);
		this.xpoints=xpoints;
		this.ypoints=ypoints;
		this.kreuzungen = kreuzungen;
		this.spielstand = spielstand;
		
	}
	

}
 
Man kann da keinen MouseListener einfach so anfügen. Man braucht einen für das gesamte Panel, und muss dann "schauen", welche Ecke angeklickt wurde. "Schauen" heißt in diesem Fall: Evtl. direkt über die Koordinaten ausrechnen (was bei Sechsecken ein bißchen frickelig sein könnte) oder brute force (aber langsam) jede vorhandene Ecke mit mousePosition.distanceTo(corner) prüfen.
 
Man kann nicht einfach so überall einen Listener dranhängen ...

Polygon erbt von Object

Polygon (Java 2 Platform SE 5.0)

Dort gibt es keine addMouseListener Methode ...

Deine Polygon Klasse hat zurzeit ja auch noch wenig mit der Anzeige zu tun ...
Es sagt ja nur wo etwas gezeichnet werden soll, oder habe ich etwas falsch verstanden ...

Wie willst du den die grafische Anzeige realisieren?
Wenn deine Polygon-Klasse ein Sechseck "zeichen" soll, könnte
man z.B. vom JComponent erben und die paintComponent Methode überschreiben.
Dann hättest du auch die Methode addMouseListener 😉

Dies ist nur eine Möglichkeit ...

JComponent (Java 2 Platform SE 5.0)

Ps.: Kann das hier empfehlen:

http://www.java-forum.org/awt-swing-swt/43939-zeichnen-swing-tutorial.html
 
Zuletzt bearbeitet:
Für Sprites (und seien es auch Sechsecke) von JComponent zu erben ist IMHO ziemlich :autsch: - jede Component hat eine getBounds()-Methode, und die macht bei Sechsecken in dieser Form nicht viel Sinn. Der MouseListener müßte also trotzdem noch prüfen, ob er IN dem Sechseck ist oder nicht...
 
Wieso Sprites? Bei Siedler von Katan sind die Sechsecke das Spielbrett. Die Ändern sich nie, werden höchstens aufgedeckt. Wenn man das mit einem Layoutmanager richtig hinbekommt ist das denke ich eleganter als das ganze in einem Panel zu zeichnen und jeden Klick auszurechnen.
 

Zurück
Oben