5

要将监听器添加到 Seesaw 中的 UI 元素,请执行以下操作:

(listen ui-element :action (fn [_] (...)))

listen:action附加一个监听器,当在 ui-element1 上触发时调用提供的函数。它还返回一个函数。如果您执行该函数,它将删除与原始调用一起添加的侦听器。

我一直在使用 Seesaw 在 REPL 中对 UI 进行原型设计,并且我没有保留来自listen.

如果我没有返回的函数,我该如何移除监听器?

4

2 回答 2

4

您可以通过以下粗略方式手动删除侦听器:

user=> (def b (button :text "HI"))
user=> (listen b :action #(alert % "HI!"))
user=> (-> (frame :content b) pack! show!)
; click the button, see the alert
; manually remove listeners
user=> (doseq [l (.getActionListeners b)] (.removeActionListener b l))
; click the button, nothing happens

你可以把它放在一个辅助函数中,并随时使用它。以某种方式内置这个seesaw.eventseesaw.dev也会很好。欢迎补丁。:)

于 2013-05-23T05:06:42.890 回答
0

如果您没有该函数引用,则不能这样做。您可以做的是*1在 REPL 中使用特殊的 vara,它基本上存储上次执行的表达式的结果,以从 REPL 中删除处理程序。

于 2013-05-23T04:37:12.567 回答