Ich möchte eine Gruppe von zehn verschiedenen Kreisen mit einer for-Schleife erstellen und jede von ihnen die Farbe ändern, wenn der Mauszeiger über eine von ihnen bewegt wird und sie auch ändern eine dritte Farbe mit einem Mausklick. Jedoch hat nur einer der Kreise - der letzte, der in der Schleife erstellt wird - die Farbänderungen, unabhängig davon, auf welchen Kreis geklickt oder über den man sich bewegt. Kann mir jemand erklären warum und wie kann ich das beheben? Ich wäre sehr dankbar. Hier ist mein Code:JavaFX - Event Handler auf verschiedenen Objekten, die von for loop erstellt werden
public class View extends Parent{
BorderPane gameScreen;
Group hexaBlock;
ArrayList<Circle> circleList = new ArrayList<>();
Circle circle;
...
public View(){
gameScreen = new BorderPane();
hexaBlock = new Group();
...
for(int y=0; y<2; y++){
for(double x=0; x<5; x++){
circle = new Circle(xPosition(hexagon width*x), yPosition(hexagon height*4*y), radius);
circleList.add(circle);
circle.setFill(Color.BLACK);
circle.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
circle.setFill(Color.CYAN);
}
});
circle.addEventHandler(MouseEvent.MOUSE_ENTERED, new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent t) {
circle.setFill(Color.RED);
}
});
circle.addEventHandler(MouseEvent.MOUSE_EXITED, new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent t) {
circle.setFill(Color.BLACK);
}
});
}
this.getChildren().add(gameScreen);
...
gameScreen.setCenter(hexaBlock);
...
hexaBlock.getChildren().addAll(circleList);
.....
Ich kann nicht in Ihrem Code sehen, wo das Problem liegt. Sie sollten ein [minimales, vollständiges und überprüfbares Beispiel] (https://stackoverflow.com/help/mcve) erstellen. – Sedrick
Sie haben aus irgendeinem Grund "Kreis" als Feld deklariert. Daher beziehen sich die Handler immer auf das Feld, das den letzten zugewiesenen Wert hat. Deklarieren Sie es stattdessen lokal in der Schleife. –
Ich habe das nicht verstanden. – Sedrick