Salve a tutti, ho creato un applicazione in cui ho una Classe astratta chiamata Terreno che implementa una cella quadrata e due sue sotto classi di Tipo Strada e di Tipo Prato.
Inserisci in una griglia (GridPane) 8x8 nei bordi oggetti di tipo strada e il resto di tipo Prato. E fin qui non ho problemi.
Ora vorrei fare che ad un MouseEvent sulla singola cella, questa venga sostituita da un tipo diverso.
Prato->Strada e viceversa.

Codice Terreno:
codice:
public abstract class Terreno extends StackPane {
 
    public abstract void Disegna();
   
}
Codice Strada:
codice:
public class Strada extends Terreno {
    Rectangle r;
    Circle auto;
    Strada(){
    Disegna();
    }
    @Override
    public void Disegna() {
        
        r = new Rectangle(50,50);
        auto = new Circle(20);
        r.setFill(Color.GREY);
        auto.setFill(Color.RED);
        auto.setOpacity(0);
        getChildren().addAll(r,c);
    }
    


    
}
Codice Prato:
codice:
public class Prato extends Terreno {
    Rectangle r1;
    Prato(){
      
    Disegna();
    }


    @Override
    public void Disegna() {
        
       r1 = new Rectangle(50,50);
       r1.setFill(Color.GREEN);
       getChildren().add(r1);
       
    }
   
    }
Codice Classe principale copio solo il pezzo del GridPane:
codice:
for(int i=0;i<size;i++){
            Terreno t;
            for(int j=0;j<size;j++){
                if(j==size-1 || j==0 || i==size-1 || i==0 ){
                t= new Strada();
                //t.setId("Strada");
                }
                else{
                t= new Prato();
                //t.setId("Prato");
                }
            root.add(t,j,i); 
            t.setOnMouseClicked(new EventHandler<MouseEvent>() {
                    @Override
                    public void handle(MouseEvent event) {
                       Terreno c;
                       
                        c = (Terreno) event.getSource ();
                        c=new Prato();
                    }
                });
            }
        }