forループで10個の異なる円のセットを作成し、マウスカーソルがそれらのいずれかの上を移動し、マウスをクリックすると3番目の色になります。ただし、ループ内で最後に作成されるサークルの1つのみが、どのサークルがクリックされたかどうかにかかわらず、色の変化があります。なぜ誰に教えてもらえますか?どうすればこの問題を解決できますか?私は非常に素晴らしいだろう。ハイアーは、私のコードです:JavaFX - forループによって作成された異なるオブジェクト上のイベントハンドラ
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);
.....ここ
どこに問題がある、私はあなたのコード内で見ることができません。 [最小、完全、かつ検証可能な例](https://stackoverflow.com/help/mcve)を作成する必要があります。 – Sedrick
何らかの理由で 'circle 'をフィールドとして宣言しました。したがって、ハンドラは常にフィールドを参照します。フィールドには、割り当てられた最後の値があります。代わりにループ内でローカルに宣言してください。 –
私はそれをキャッチしませんでした。 – Sedrick