2

これがばかげた間違いであることを願っていますが、私には見えません。

; 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)

clojure がaddItemListenerメソッドを見つけられないのはなぜですか?

4

1 に答える 1

3

コンボボックスを 2 回目に 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)
于 2012-07-06T08:12:22.387 に答える