Listbox (JList) No se actualizará dinámicamente desde ListModel personalizado

Estoy trabajando en una aplicación GUI en Clojure utilizando Seesaw y tengo problemas para obtener un cuadro de lista (JList en Java) para actualizar cuando mi ListModel personalizado se actualiza.

Aquí está algo de mi código:

(deftype ActionHistoryListModel
  [^{:unsynchronized-mutable true} listeners
   ^{:unsynchronized-mutable true} listening-to]

  ListModel
  (addListDataListener [this listener]
    (set! listeners (conj listeners listener)))
  (removeListDataListener [this listener]
    (set! listeners (remove #(= % listener) listeners)))
  (getSize [this] 
    (get-in (deref listening-to) [:count]))
  (getElementAt [this index]
    (get-in (deref listening-to) [:actions index]))

  ActionHistoryListModelProtocol
  (listen-to [this r]
    (do
      (set! listening-to r)
      (add-watch r this (fn [_ _ _ new-state] (.notify this new-state)))))
  (notify [this new-state]
    (let [action ((meta new-state) :last-action)
          const  (cond
            (= action :create) INTERVAL_ADDED
            (= action :update) CONTENTS_CHANGED)
          index  (last ((meta new-state) :action-target))
          event  (ListDataEvent. this const index index)
          notification (cond
            (= action :create) #(.intervalAdded % event)
            (= action :update) #(.contentsChanged % event))
          ]
      (. (.. System out) print (str "Index: " index "\n" "Event: " event "\n"))
      (map #(invoke-later (notification %)) listeners)))
  )

(defn make-action-history-list-model []
  (ActionHistoryListModel. #{} nil))

(def ahlm (make-action-history-list-model))
(.listen-to ahlm action-history)

(def undo-list (listbox :model ahlm))

; then put list in frame...

dóndeaction-history es unref.

Va al punto donde la lista debe actualizarse porque laSystem.out.print está sucediendo, pero el cuadro de lista no quiere actualizar

¿Alguna idea sobre lo que podría salir mal? ¿Es algo con la combinación de usar el EDT y ver la devolución de llamada?

Déjame saber si se necesita más código.

Respuestas a la pregunta(1)

Su respuesta a la pregunta