【发布时间】:2014-05-28 06:36:06
【问题描述】:
我是 Clojure、Java 和函数式编程的新手。我开始使用 SeeSaw 的 GUI 并喜欢它。使用来自Dave Ray 的示例,我创建了一个小部件:
(defrecord Col-definition [id col-name col-position])
具有创建组合框、标签和文本框的相关功能,最明显的是使用extend-type:
(extend-type Col-definition
MakeWidget
(make-widget* [col-definition]
(mig-panel
:constraints ["", "[][grow]"]
:border [(line-border :thickness 1) 2]
:items [["Column Name" "gap 10"]
;;[(col-name-field (:id col-definition) col-definition :col-name) "growx, wrap"]
[(:col-name col-definition) "growx, wrap"]
["Ordinal Position" "gap 10"]
[(col-name-field (:id col-definition) col-definition :col-position) "growx"]])))
这些小部件是通过 defrecord 的实例构建的,因此绑定到屏幕区域:
(def second-combocoll '("Col0" "Col1" "Col2"))
(def second-bottom (vertical-panel :items (vec (col-defs second-combocoll))))
(def areabottom second-bottom)
其中areabottom 是房地产的分割区域。这一切都很好。
但我想从数据库中读取数据并用新的组合框集合动态替换小部件。
我似乎无法删除小部件,(remove! areabottom second-combocol) 或 (replace! areabottom new-combocol) 或任何其他聪明的想法都付诸东流。
那么问题来了:如何在触发事件(例如单击要加载的文件路径)后替换或删除自定义小部件?
【问题讨论】: