Kreise anklicken (Farbänderung)

Mulan

Mitglied
Hallo,

ich möchte gerne in ein Panel x- Kreise zeichnen. Wobei die Anzahl der Kreise dem Konstruktor übergeben wird, den Wert habe ich in der Variable anzahl gespeichert. Ich habe dazu folgende Imports in meiner Klasse:
[JAVA=42]
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
[/code]
Und folgende Methode:
[JAVA=42]
public void paintComponentent(Graphics g)
{
super.paintComponent(g);
kreispanel.add(g);
for (int i = 1; i < anzahl; i++)
{
g.drawOval(40*i, g.getY(),40,40);
g.setColor(Color.white);
g.addMouseMotionListener(new MyMotionListener ()) ;
}
}
[/code]
Jetzt würde ich gerne, wenn man auf einen Kreis klickt diesen Kreis Schwarz färben. Dafür habe ich in einer anderen Klasse (implements MouseListener) folgende Methodenüberschreibung durchgeführt.
[JAVA=42]
public void mouseClicked(MouseEvent arg0)
{
Graphics g=getGraphics();
// g.getY(); sollte den Wert für y des Panels liefern
int radius = 20;
g.drawOval(40*i,g.getY(),40,40);
g.setColor(Color.black);
g.fillOval(e.getX()-radius,g.getY(),40,40);
}
[/code]
Aber das funktioniert natürlich nicht, wie es soll (oder auch überhaupt). Ich komme nicht drauf, wie ich erkenne, welchen der Kreise ich ausgewählt habe.
Irgendwie müsste das doch mit den Koordinaten und dem Radius zusammenhängen….
Hat jemand einen Tipp für mich?

Viele Grüße
Mulan
 
niemals getGraphics() aufrufen,
setze irgendwo die Info (*) und rufe repaint() auf, damit in geordneten Bahnen der Kreis neu in der richtigen Farbe gemalt wird,

(*) für die Mausberechnung brauchst du sowieso ein richtiges Hintergrundmodell, erstelle eine Klasse für Kreise mit Position und Farbe,
die Mausposition vergleiche mit allten Positionen bekannter Objekte, dann weißt du welches gerade unter der Maus liegt,
dort dann die Farbe ändern und repaint(), welches eben alle Objekte passend malt


------

in paintComponent keine Listener adden oder removen, das passiert einmal am Anfang,
und in diesem Fall auch nicht in einer Schleife sonst hast du bei einem Klick zig Listener, die dieselbe Aktion ausführen,
g.addMouse..() gibts doch auch gar nicht?!

> kreispanel.add(g);
sieht auch höchst verdächtig aus..
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben