Clojure - 自动更新列表框

标签 clojure listbox seesaw

这就是我想做的:

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

最佳答案

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

关于Clojure - 自动更新列表框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10775578/

相关文章:

clojure - 传递给 : jdbc/query using Korma 的参数 (4) 数量错误

clojure - Clojure 中的参数重载

银光 4 : Listbox doesn't shrink when its items shrink

c# - 到达最后一项时 WP7 自动增长列表框

java - 无法在类路径中找到 seesaw/core.clj?

oop - 从中缀到前缀表示法的过渡

clojure - 使用 lein 将依赖项添加到 clojure 项目

c# - 在 wpf 中禁用 itemscontrol 上的鼠标滚轮

swing - 我应该将 Java 用于为 clojure 应用程序设计的自定义 Swing 组件吗?