I'm using "proxy" to extend various Swing classes in a Clojure GUI application, generally with code that looks something like:
(def ^JPanel mypanel
(proxy [JPanel] []
(paintComponent [#^Graphics g]
(.drawImage g background-image 0 0 nil))))
This works well but I can't figure out how to add additional fields to the newly extended class, for example making the background-image a field that could be subsequently updated. This would be pretty easy and common practice in Java.
Is there a good way to do this in Clojure? Or is there another preferred method to achieve the same effect?
You can use something like this:
(defn ^JPanel mypanel [state]
(proxy [JPanel] []
(paintComponent [#^Graphics g]
(do
(comment do something with state)
(.drawImage g background-image 0 0 nil)))))
or use any other outer function/ref.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With