2012-05-27 59 views

回答

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)))) 
+0

非常感謝;這工作完美 –

4

另一種方式來做到這一點是裁判的內容綁定到列表框的模式,採用seesaw.bind。

(require [seesaw core [bind :as b]]) 
(def lb (listbox)) 
(def r (ref [])) 
(b/bind r (b/property lb :model)) 

seesaw.bind庫很值得探索,恕我直言。 API一旦你有一些想法是如何結合在一起的文件,這是很好的記錄; this blog post是一個很好的介紹。