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

SCd*_*CdF 5 clojure seesaw

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

(listen ui-element :action (fn [_] (...)))
Run Code Online (Sandbox Code Playgroud)

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

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

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

Dav*_*Ray 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
Run Code Online (Sandbox Code Playgroud)

您可以将其放入辅助函数中并随时使用它。seesaw.event以某种方式内置此功能seesaw.dev也很好。欢迎补丁。:)