Hallo,
ich habe ein zweidimensionales Array von Rechtecken. Diese Rechtecke werden auf ein Panel gezeichnet, so dass ich quasi eine graphische Repräsentation meines Arrays habe. Jetzt möchte ich ich jeweils mit den einzelnen Rechtecken agieren können, wenn ich sie anklicke. Erstmal soll einfach nur die Farbe des Rechtecks geändert werden.
Meine Idee war, dass ich bei einem Klick über das Array gehe und Zelle für Zelle jedes Rechteck überprüfe ob sich mit den Klickkoordinaten schneidet (der einfachheit halber habe ich aus den Klickkoordianten ein kleines Rechteck mit Kantenlänge 1 gemacht)
Das ganze die dann in etwa so aus:
[Java]
public void mouseClicked(MouseEvent e) {
Rectangle2D.Double q2 = new Rectangle2D.Double();
q2.x = e.getX();
q2.y = e.getY();
q2.width = 1;
q2.height = 1;
for (int i = 0; i < field[0].length; i++) {
for (int j = 0; j < field.length; j++) {
Rectangle2D.Double q1 = field[j];
if (q1.intersects(q2)) {
System.out.println("Bam");
q1.clicked();
}
}
}
}
[/Java]
Das Problem ist jetzt, dass wenn die bedingung erfüllt ist immer das Quadrat unter dem geklickten die Farbe ändert. Das Ganze passiert auch etwas zeitverzögert. Ich denke einfach, dass meine Herangehensweise nicht wirklich effizient ist. Hat jemand vielleicht eine Idee, wie ich das Ganze effizienter gestalten könnte?
ich habe ein zweidimensionales Array von Rechtecken. Diese Rechtecke werden auf ein Panel gezeichnet, so dass ich quasi eine graphische Repräsentation meines Arrays habe. Jetzt möchte ich ich jeweils mit den einzelnen Rechtecken agieren können, wenn ich sie anklicke. Erstmal soll einfach nur die Farbe des Rechtecks geändert werden.
Meine Idee war, dass ich bei einem Klick über das Array gehe und Zelle für Zelle jedes Rechteck überprüfe ob sich mit den Klickkoordinaten schneidet (der einfachheit halber habe ich aus den Klickkoordianten ein kleines Rechteck mit Kantenlänge 1 gemacht)
Das ganze die dann in etwa so aus:
[Java]
public void mouseClicked(MouseEvent e) {
Rectangle2D.Double q2 = new Rectangle2D.Double();
q2.x = e.getX();
q2.y = e.getY();
q2.width = 1;
q2.height = 1;
for (int i = 0; i < field[0].length; i++) {
for (int j = 0; j < field.length; j++) {
Rectangle2D.Double q1 = field[j];
if (q1.intersects(q2)) {
System.out.println("Bam");
q1.clicked();
}
}
}
}
[/Java]
Das Problem ist jetzt, dass wenn die bedingung erfüllt ist immer das Quadrat unter dem geklickten die Farbe ändert. Das Ganze passiert auch etwas zeitverzögert. Ich denke einfach, dass meine Herangehensweise nicht wirklich effizient ist. Hat jemand vielleicht eine Idee, wie ich das Ganze effizienter gestalten könnte?