如果我没有保留return函数,如何从Seesaw中的对象中删除侦听器?

时间:2013-05-23 02:35:02

标签: clojure seesaw

要在Seesaw中为UI元素添加侦听器,请执行以下操作:

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

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

我一直在使用Seesaw在REPL中对UI进行原型设计,但我没有保留listen的返回值。

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

2 个答案:

答案 0 :(得分: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也很好。补丁欢迎。 :)

答案 1 :(得分:0)

如果您没有该功能参考,则无法执行此操作。你可以做的是在REPL中使用*1特殊的vara,它基本上存储了最后执行的表达式的结果,从REPL中删除处理程序。