Clojure - 自动更新列表框

Gar*_*art 6 listbox clojure seesaw

这就是我想做的事情:

我有一个代表项目列表的参考.我想要一个列表框(跷跷板?)显示此列表内容,自动更新(每当我更改参考时).

Nik*_*zov 4

您可以使用add-watch添加回调,每次修改 ref 时都会调用该回调。此回调应该调用更新列表框的方法:

(def data (ref [1 2 3]))

(defn list-model 
  "Create list model based on collection"
  [items]
  (let [model (javax.swing.DefaultListModel.)]
    (doseq [item items] (.addElement model item))
    model))

(def listbox (seesaw.core/listbox :model [])) 

(add-watch data nil
  (fn [_ _ _ items] (.setModel listbox (list-model items))))
Run Code Online (Sandbox Code Playgroud)