Swing Clojure can';找不到方法JComboBox.addItemListener

Swing Clojure can';找不到方法JComboBox.addItemListener,swing,clojure,Swing,Clojure,希望这只是一个愚蠢的错误,但我看不出来 ; OK => (filter (fn [x] (= "addItemListener" (.getName x))) (.getMethods javax.swing.JComboBox)) (#<Method public void javax.swing.JComboBox.addItemListener(java.awt.event.ItemListener)>) ; Error => (let [combobox (ja

希望这只是一个愚蠢的错误,但我看不出来

; OK
=> (filter (fn [x] (= "addItemListener" (.getName x))) (.getMethods javax.swing.JComboBox))
(#<Method public void javax.swing.JComboBox.addItemListener(java.awt.event.ItemListener)>)

; Error
=> (let [combobox (javax.swing.JComboBox. (java.util.Vector. ['a 'b 'c]))]
       (.addItemListener combobox
         (proxy [java.awt.event.ItemListener] []
           (itemStateChanged [item-event] (println (str "selection changed to " (.getSelectedItem combobox)))))
         combobox))
java.lang.IllegalArgumentException: No matching method found: addItemListener for class javax.swing.JComboBox (NO_SOURCE_FILE:0)
;好啊
=>(过滤器(fn[x](=“addItemListener”(.getName x)))(.getMethods javax.swing.JComboBox))
(#)
; 错误
=>(让[combobox(javax.swing.JComboBox.(java.util.Vector。['a'b'c]))
(.addItemListener组合框
(代理[java.awt.event.ItemListener][]
(itemStateChanged[项目事件](println(str“selection”更改为“(.getSelectedItem组合框щщ)]”)
组合框)
java.lang.IllegalArgumentException:未找到匹配方法:类javax.swing.JComboBox的addItemListener(无源文件:0)

为什么clojure找不到addItemListener方法?

如果要将组合框第二次传递给addItemListener方法,可能需要从let表单返回它

这应该起作用:

(let [combobox (javax.swing.JComboBox. (java.util.Vector. ['a 'b 'c]))]
  (.addItemListener combobox
                    (proxy [java.awt.event.ItemListener] []
                      (itemStateChanged [item-event]
                        (println (str "selection changed to "
                                      (.getSelectedItem combobox))))))
  combobox)

啊,括号错误,谢谢!但是,您确定
这个
参考吗?cheatsheet()中的示例没有使用它,我发现我的代码没有它也可以工作。也许我没有正确地理解它,或者它已经过时了?啊,错过了“隐含”这个词。它没有传递给函数,只是神奇地出现在作用域中。