2012-05-27 10 views
6

यहाँ मैं क्या करना चाहते हैं क्या है। मुझे सूची बॉक्स (देखा?) जो इस सूचियों को प्रदर्शित करता है, स्वचालित रूप से अद्यतन करता है (जब भी मैं रेफरी बदलता हूं)।Clojure Autoupdating लिस्टबॉक्स

उत्तर

4

आप कॉलबैक जोड़ने के लिए add-watch का उपयोग कर सकते हैं जिसे हर बार संशोधित किया जाएगा।

(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)) 

seeaw.bind लाइब्रेरी खोज के लायक है, IMHO। API अच्छी तरह से प्रलेखित है जब आपको कुछ पता चल जाए कि यह सब एक साथ कैसे फिट बैठता है; this blog post एक अच्छा परिचय है।