Clojure-自动更新列表框
以下是我想做的: 我有一个ref,它表示一个项目列表。我希望有一个列表框(跷跷板?)。此回调应调用更新列表框的方法:Clojure-自动更新列表框,clojure,listbox,seesaw,Clojure,Listbox,Seesaw,以下是我想做的: 我有一个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)
(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))))
另一种方法是使用seesaw.bind将ref的内容绑定到listbox的模型
(require [seesaw core [bind :as b]])
(def lb (listbox))
(def r (ref []))
(b/bind r (b/property lb :model))
IMHO,seesaw.bind库非常值得探索。一旦你知道了所有这些是如何结合在一起的,你就可以很好地记录它们;这是一个很好的介绍