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.
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?
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.
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.
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.
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.