那里!我在swing/clojure中构建了一个图像处理应用程序,现在我需要开发一个图像面板,在该面板中我可以点击并计算数据。感谢coobird,我现在对如何在Java中实现这个想法有了一个很好的想法,但是我仍然没有在与Clojure集成方面遇到很多问题。图像处理,在Clojure中扩展JPanel和模拟类
让我们来看看coobird如何建议我这样做。首先,我们应该用Java扩展一个类。 Clojure中,我们这样做与proxy
宏,所以我们希望有这样的事情:
(def painting-panel (proxy [JPanel] []))
下一步是创建类的构造函数,并设置一些变量。
我可以在代理的第二个参数后面定义函数,但是如何创建构造函数呢?绘画面板是这个类的名称(因此我应该创建函数的名称)?
我该如何处理类变量?我应该像
let
那样定义它们,就像我一样吗?是
this
和super
可供我使用,就像我下面做的那样?
(def painting-panel (let [background-image (Image.) point-clicked (Point.)] (proxy [JPanel] [] (paintComponent [g] (do ((.paintComponent super) g) (doto g (.drawImage background-image 0 0 nil) (.fillRect (.x point-clicked) (.y point-clicked) 1 1)))) (painting-panel []; constructor? ((.addMouseListener this) (proxy [MouseAdapter] [] (mouseClicked [e] (do (def point-clicked (.getPoint e)) (.repaint this)))))))))
建议和代码更正也欢迎!
谢谢!
我爱你,伙计们。认真。 – konr 2009-10-05 21:53:11
我也爱你。 – 2010-01-14 01:46:38