JavaFX. Registrar eventHandler en clase personalizada

Intento registrar eventHandler en mi clase personalizada. No sé qué interfaz o métodos debo implementar para teneraddEventHandler método en mi clase personalizada. Por esta razón miModel la clase se extiendeRectangle (Rectangle la clase tieneaddEventHandler mecanismo).

Además, no sé por qué asignadoobjeto fuente no funciona (ver comentario enController clase).

Crear eventos personalizados que realizo con este tutorial:https://stackoverflow.com/a/27423430/3102393.

Estructura del proyecto

Controlador

package sample;

import javafx.event.Event;

public class Controller {
    private Model model;

    public Controller() {
        model = new Model();

        model.addEventHandler(MyEvent.ROOT_EVENT, this::handler);
    }

    private void handler(MyEvent event) {
        if(event.getEventType().equals(MyEvent.INSTANCE_CREATED)) {
            // Why is event.getSource() instence of Rectangle and not instance of assigned MyObject?
            Object obj = event.getSource();
            System.out.println(event.getMyObject().getText());
        }
    }

    public void clickedCreate(Event event) {
        model.makeEvent();
    }
}

Modelo

package sample;

import javafx.scene.shape.Rectangle;
import java.util.ArrayList;

public class Model extends Rectangle {

    private ArrayList<MyObject> objects = new ArrayList<>();
    private Integer counter = 0;

    public void makeEvent() {
        MyObject object = new MyObject((++counter).toString() + "!");

        objects.add(object);
        fireEvent(new MyEvent(object, null, MyEvent.INSTANCE_CREATED));
    }
}

Evento personalizadoMyEvent

package sample;

import javafx.event.Event;
import javafx.event.EventTarget;
import javafx.event.EventType;

public class MyEvent extends Event {

    public static final EventType<MyEvent> ROOT_EVENT = new EventType<>(Event.ANY, "ROOT_EVENT");
    public static final EventType<MyEvent> INSTANCE_CREATED = new EventType<>(ROOT_EVENT, "INSTANCE_CREATED ");
    public static final EventType<MyEvent> INSTANCE_DELETED = new EventType<>(ROOT_EVENT, "INSTANCE_DELETED");

    private MyObject object;

    public MyEvent(MyObject source, EventTarget target, EventType<MyEvent> eventType) {
        super(source, target, eventType);

        object = source;
    }

    public MyObject getMyObject() {
        return object;
    }
}

Y finalmente MyObject

package sample;

public class MyObject {
    private String text;

    MyObject(String text) {
        this.text = text;
    }

    public String getText() {
        return text;
    }
}

Nota (y pregunta): También intenté usar unObservableList de instancias deMyObjects, pero creo que hayNo notificar para actualizar el atributo de instancia.

Respuestas a la pregunta(1)

Su respuesta a la pregunta