# Mapspiel



## Marcil (17. Sep 2011)

Hallo,
ich will ein Programm schreiben, bei der man eine unbeschriftete Karte hat und auf dieser Karte dann bestimmt Städte möglichst genau zeigen soll. Mein Problem ist, dass ich nicht weiß, wie ich in java eine Markierung, wie z.B ein Pfeil oder ein anderes Objekt bei einem Mausklick setzen kann, und die Koordinaten dieses erstellten Objektes speichern kann. 
Für eine kleine Hilfe wäre ich sehr dankbar


----------



## turtle (17. Sep 2011)

Das sind ja gleich zwei Fragen ;-)


Du kannst mit einem MouseListener reagieren, wenn Du die Maus geklickt hast (mouseClicked()). Dabei bekommst Du einen MouseEvent übergeben, in dem die Koordinate drin steht. Dann kannst Du ein "Objekt" in paintComponent() Deiner JComponent malen und gegen Städte testen.

Aber Du solltest wissen, dass die Daten (natürlich) "nur" Koordinaten des Screens darstellen. 

Oft möchte man bei Kartenanwendungen aber im Koordindatensystem der Karte Punkte lokalisieren und diese Umrechnung ist aufwändiger und schwieriger. Ob das bei Dir notwendig ist, kannst nur Du wissen.


----------



## Network (18. Sep 2011)

turtle hat gesagt.:


> Oft möchte man bei Kartenanwendungen aber im Koordindatensystem der Karte Punkte lokalisieren und diese Umrechnung ist aufwändiger und schwieriger. Ob das bei Dir notwendig ist, kannst nur Du wissen.



Aufwendiger und schwieriger???
Ein MouseListener gibt die exakten Koordinaten der Maus auf dem Objekt(z.B. JPanel) bei einem MouseEvent(Mausklick, Mausbewegung,...etc.).
Die Koordinaten vom "Bildschirm" kann man sich auch abholen wenn man will ist aber weder sinnvoll noch notwendig in diesem Beispiel!

Um der Frage Antwort zu leisten:

```
public class TEST implements MouseListener  {
	public TEST() {
```
Fals du Eclipse hast wird es für dich automatisch die benötigten Extramethoden einfügen!

In der Methode MousePressed(MouseListener arg)
kannst du dann mit "arg.getX()" und "arg.getY()" die Koordinaten beziehen wo geklickt wurde 

Das sind sehr schwammige Angaben.
Wenn du genauere haben willst frag einfach nochmal


----------



## jDennis79 (18. Sep 2011)

Network hat gesagt.:


> Aufwendiger und schwieriger???
> Ein MouseListener gibt die exakten Koordinaten der Maus auf dem Objekt(z.B. JPanel) bei einem MouseEvent(Mausklick, Mausbewegung,...etc.).



Ich glaube, was turtle meinte, war: Bei einer Kartenanwendung wird üblicherweise nur ein bestimmter *Ausschnitt* der Karte angezeigt. Die Koordinaten des (z. B.) JPanel sind also nicht notwendigerweise die Koordinaten der Karte. Außerdem sind die Koordinaten der Maus ja in Pixeln - für eine Kartenanwendung also je nach zu implementierender Funktion ungeeignet. Sowas stelle ich mir dann in der Tat aufwendig und schwierig vor, aber du kannst mich / uns gern eines besseren belehren.


----------



## Network (18. Sep 2011)

jDennis79 hat gesagt.:


> Ich glaube, was turtle meinte, war: Bei einer Kartenanwendung wird üblicherweise nur ein bestimmter *Ausschnitt* der Karte angezeigt. Die Koordinaten des (z. B.) JPanel sind also nicht notwendigerweise die Koordinaten der Karte. Außerdem sind die Koordinaten der Maus ja in Pixeln - für eine Kartenanwendung also je nach zu implementierender Funktion ungeeignet. Sowas stelle ich mir dann in der Tat aufwendig und schwierig vor, aber du kannst mich / uns gern eines besseren belehren.



Das stimmt natürlich!
Aber je nachdem was man verwendet z.B. JScrollPane, kann man von diesem die Position auf dem JPanel ablesen und hinzuaddieren
Die Karte selber wird auch in Pixeln dargestellt... Also ja in diesem Fall entsteht eine geringe zu vernachlässingende Ungenauigkeit


----------



## jDennis79 (18. Sep 2011)

Network hat gesagt.:


> Die Karte selber wird auch in Pixeln dargestellt...



Klar. Aber wenn man jetzt oder später nicht nur Pfeile zeichnen, sondern auch z. B. Entfernungen berechnen will, interessiert einen ja nicht, wie viele Pixel Köln von München entfernt ist. Und wenn die Karte dann noch verschiedene Maßstäbe bietet, wird's mit der Umrechnerei eben schnell sehr komplex.


----------



## bERt0r (18. Sep 2011)

naja, (int)(x*Scollbarvalue*Maßstab) oder hab ich was vergessen?


----------

