gezeichnetes Objekt anklicken

Josie

Mitglied
Hallo

Ich habe Objekte ( jedes Objekt besitzt xPosition und yPosition eines 2D-Arrays sowie eine eindeutigen ID-Nr.) in einer Liste gespeichert, die ich als Kreise auf einem JPanel zeichnen lasse.

Ist es nun möglich, dass ich diese Kreise mit der Maus anklicken kann? Wenn ja, wie kann ich das umsetzen?

Vielen Dank.
Katrin
 
@Thallius hat dir schon den richtigen Hinweis gegeben.

Was du dann von dem MouseListener bekommst ist ein MouseEvent mit der du die x und y Koordinate im aktuellen Panel erhälst.
Dann musst du nur noch deine Liste durchlaufen und sehen welches Objekt die Koordinate beinhaltet.
 
Danke für die Antworten.
Mein Problem ist, dass der MouseEvent aber die Position der Maus auf dem JPanel gibt. Meine Objekte haben aber die Position des Arrays (HxB des Array, also zB 4x5 als Raster und ein Objekt hat die Position (0,2)). Das kann ich ja nicht mit der Position vergleichen, die mir der MouseEvent liefert.
Gibts noch andere Möglichkeiten?
 
Danke für die Antworten.
Mein Problem ist, dass der MouseEvent aber die Position der Maus auf dem JPanel gibt. Meine Objekte haben aber die Position des Arrays (HxB des Array, also zB 4x5 als Raster und ein Objekt hat die Position (0,2)). Das kann ich ja nicht mit der Position vergleichen, die mir der MouseEvent liefert.
Gibts noch andere Möglichkeiten?

Eventuell (etwas aufwendiger) diese Alternative: das Objekt (zB ein JPanel), an dem du die Kreise zeichnest, hat eine x und y Koordinate. Das MouseEvent enthält (vermute ich) eine Koordinate relativ zum JPanel. Dann muss man suchen, zum welchen Kreis die Koordinate vom MouseEvent gehört.
 
Irgendwie sehe ich, dass du keine Ahnung hast was du tust. Alle Beiträge sind für den Lösungsansatz wichtig.

Wie sieht denn dein Code generell aus?
 
Dass ich keine Ahnung habe, von dem was ich tue, kann schon möglich sein. Darum bitte ich ja um Hilfe.


Mein Code ist lang und über mehreren Klassen verstreut. Hier ein Ausschnitt:



Das Array als Grundlage
Java:
private void spielfeldInitialisieren() {
    
        for (int i = 0; i < breite; i++) {
            for (int y = 0; y < hoehe; y++) {
                spielfeld[i][y] = 0;
            }
        }
    }

Instanziieren der Kreise (Inseln)
Java:
ins = new Insel(posX, posY, listInseln, id)

Die Kreise zeichnen
Java:
 public void paintComponent(Graphics g) {
     for(Insel ins:listInseln) {
   
           
            g.drawOval(spielfeld[ins.getPosInselX()][ins.getPosInselY()]+ ABSTAND*ins.getPosInselX(), spielfeld[ins.getPosInselX()][ins.getPosInselY()]+ABSTAND*ins.getPosInselY(), ABSTAND/2, ABSTAND/2);

        }


    }


Ich benutze zur Ausgabe ein Array, weil ich so einfacher die Kreise in einem Raster zeichnen kann.
Ich verstehe noch nicht, wie ich die Koordinaten des MouseEvents mit den der Kreise vergleichen kann. Oder wie kann ich den Kreisen die "richtigen" Koordinaten geben?
 
Ah ja hier hast du schon die Werte die du benötigst, damit du ermitteln kannst, wo der Kreis ist:
Java:
g.drawOval(spielfeld[ins.getPosInselX()][ins.getPosInselY()]+ ABSTAND*ins.getPosInselX(), spielfeld[ins.getPosInselX()][ins.getPosInselY()]+ABSTAND*ins.getPosInselY(), ABSTAND/2, ABSTAND/2);
Du weißt wo eine Insel beginnt, wie breit sie ist und natürlich wie hoch. Dann kannst du dir auch ausrechnen, ob ein Punkt (MouseEvent) in deinem der Inseln liegt.
 

Zurück
Oben