6

これが私がやりたいことです:

アイテムのリストを表す参照があります。このリストの内容を表示するリストボックス(シーソー?)が欲しいのですが、自動的に更新されます(参照を変更するたびに)。

4

2 に答える 2

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))))
于 2012-05-27T17:35:15.313 に答える
4

これを行う別の方法は、seesaw.bindを使用して、参照の内容をリストボックスのモデルにバインドすることです。

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

seesaw.bindライブラリは、探索する価値があります、IMHO。APIがどのように組み合わされているかがわかったら、APIは十分に文書化されています。このブログ投稿は素晴らしい紹介です。

于 2012-06-18T09:18:26.237 に答える