Java - Oval MouseListener

Liebe Expertin, lieber Experte,

gibt es eine Möglichkeit in Java mehrere Ovale mit MouseListeners zu versehen?

Ich wollte nämlich 8 Ovale generieren. Wenn man dann auf einer dieser Klickt, sollen bestimmte Sachen passieren.

Ich habe es bisher hiermit versucht:
class Punkt extends JComponent implements MouseListener{
public Punkt(Graphics g, int x, int y){
int z = 20;
x -= 5;
y -= 5;
g.setColor(Color.RED);
Ellipse2D oval0 = new Ellipse2D.Double(x + z, y, 10, 10);
Ellipse2D oval1 = new Ellipse2D.Double(x - z, y, 10, 10);
Ellipse2D oval2 = new Ellipse2D.Double(x, y + z, 10, 10);
Ellipse2D oval3 = new Ellipse2D.Double(x, y - z, 10, 10);
Ellipse2D oval4 = new Ellipse2D.Double(x + z, y + z, 10, 10);
Ellipse2D oval5 = new Ellipse2D.Double(x + z, y - z, 10, 10);
Ellipse2D oval6 = new Ellipse2D.Double(x - z, y + z, 10, 10);
Ellipse2D oval7 = new Ellipse2D.Double(x - z, y - z, 10, 10);
Graphics2D g2d = (Graphics2D) g;
addMouseListener(this);
g2d.fill(oval0);
g2d.fill(oval1);
g2d.fill(oval2);
g2d.fill(oval3);
g2d.fill(oval4);
g2d.fill(oval5);
g2d.fill(oval6);
g2d.fill(oval7);

}
public void mouseClicked(MouseEvent e) {
if ((e.getButton() == 1)) {
repaint();
}

Vielen Dank für deine Hilfe schon einmal im Voraus.

MfG Ascawath

Hallo Ascawath

Wenn ich dein Problem richtig verstehe, dann würde ich im Event Handler anhand der Maus Koordinaten checken, innerhalb welcher Ellipse der Klick stattgefunden hat.

Was funktioniert daran nicht, bzw. habe ich dein Problem nicht korrekt erfasst?

Gruss,
– ZEBU

Hallo Zebu,

danke für deine schnelle Antwort.
Mein Problem ist, dass ich nicht weiß, wie ich den Listener mit den einzelnen Punkten hinbekommen, wann woher weiß ich dann, welcher gedrückt worden ist, wenn sich die Koordinaten andauernd ändern.

MfG Ascawath

Hi

Ich verstehs nicht.

Irgendwo definierst du ein Array mit deinen Ellipsen, bzw. den aktuellen Koordinaten deiner Ellipsen.

Irgend ein Thread (oder eine andere Logik) verändert vermutlich diese Koordinaten laufend.

In der paint Methode hast du Zugriff auf dieses Array und zeichnest die Ellipsen.

Im Listener hast du ebenfalls Zugriff auf das Array, kriegst mit dem Event die Koordinaten der Maus und checkst in welcher der Ellipsen diese Koordinaten liegen.

Falls ich den Wald vor lauter Bäumen nicht sehe, dann bitte um eine genauere Beschreibung von was du machst. Ich habe aber eher das Gefühl, hier geht es um das grundlegende Verständnis von Java.

Gruss,
– christoph

Hi,

scheinbar hast du mein Problem aber richtig verstanden.
Bei mir hapert es jetzt aber nur noch daran, dass ich im Listener Zugriff auf das Array habe.
Ich hatte vorher im Quelltext bei der If-Abfrage im Listener: if ((e.getButton() == 1) && oval0.contains(e.getX(), e.getY()) ) {

Eclipse sagt mir aber, dass er auf oval0 nicht zugreifen kann.

Sorry, da kann ich nicht helfen.

Wie bereits gesagt: Es happert wohl am grundsätzlichen Verständnis von Java, bzw. prinzipiell zum Thema Software Entwicklung. Die Variable oval0 ist offensichtlich im Scope deines Handlers nicht sichtbar.

Ich vermute: Entweder sie ist in einer anderen Klasse deklariert und dort gibt es keinen Getter, oder sie ist in einer anderen Methode der selben Klasse deklariert.

Die Ellipse ist noch vor dem Konstruktor deklariert.
Also noch in der Klasse Punkt, dann
private Ellipse2D oval0;
und dann kommt der Konstruktor Punkt.

Danke trotzdem für deine Antwort.

MfG Ascawath

Sorry, da kann ich nicht helfen.

Hi Ascawath,

da kann ich leider nicht helfen, sorry.

Gruß vom Linuxxer

sorry, aber da bin ich leider nicht so im Thema