在 Clojure 中向代理类添加字段

发布于 2024-09-06 02:45:27 字数 343 浏览 5 评论 0原文

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

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

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

在 Clojure 中有没有好的方法可以做到这一点?或者是否有另一种首选方法可以达到相同的效果?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

诺曦 2024-09-13 02:45:27

您可以使用类似这样的内容:

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

或使用任何其他外部函数/引用。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文