Clojure - 自动更新列表框



这是我想做的:

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

您可以使用 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))))

另一种方法是使用 seesaw.bind 将 ref 的内容绑定到列表框的模型。

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

恕我直言,跷跷板.bind 库非常值得探索。一旦您知道它是如何组合在一起的,API 就会有很好的文档记录;这篇博文是一个很好的介绍。

相关内容

  • 没有找到相关文章

最新更新