Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure-自动更新列表框_Clojure_Listbox_Seesaw - Fatal编程技术网

Clojure-自动更新列表框

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)

以下是我想做的:

我有一个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))))

另一种方法是使用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库非常值得探索。一旦你知道了所有这些是如何结合在一起的,你就可以很好地记录它们;这是一个很好的介绍