9

我正在使用“代理”来扩展 Clojure GUI 应用程序中的各种 Swing 类,通常使用如下代码:

(def ^JPanel mypanel 
  (proxy [JPanel] []
    (paintComponent [#^Graphics g]
      (.drawImage g background-image 0 0 nil))))

这很好用,但我不知道如何向新扩展的类添加其他字段,例如使背景图像成为随后可以更新的字段。这在 Java 中将是非常简单和常见的做法。

在 Clojure 中有没有好的方法来做到这一点?或者是否有另一种优选的方法来达到同样的效果?

4

1 回答 1

9

你可以使用这样的东西:

(defn ^JPanel mypanel [state]
  (proxy [JPanel] []
    (paintComponent [#^Graphics g]
      (do
        (comment do something with state)
        (.drawImage g background-image 0 0 nil)))))

或使用任何其他外部功能/参考。

于 2010-06-16T20:59:19.273 回答