Swing 图像处理、扩展JPanel和模拟Clojure中的类
那里!我正在swing/clojure中构建一个图像处理应用程序,现在我需要开发一个图像面板,在其中我可以单击并计算数据。多亏了,我现在对如何在Java中实现这一点有了一个很好的想法,但在它与Clojure的集成方面我仍然没有太多问题 让我们看看库伯德是怎么建议我的。首先,我们应该用Java扩展一个类。在clojure中,我们使用Swing 图像处理、扩展JPanel和模拟Clojure中的类,swing,lisp,clojure,Swing,Lisp,Clojure,那里!我正在swing/clojure中构建一个图像处理应用程序,现在我需要开发一个图像面板,在其中我可以单击并计算数据。多亏了,我现在对如何在Java中实现这一点有了一个很好的想法,但在它与Clojure的集成方面我仍然没有太多问题 让我们看看库伯德是怎么建议我的。首先,我们应该用Java扩展一个类。在clojure中,我们使用proxy宏来执行此操作,因此我们有如下内容: (def painting-panel (proxy [JPanel] [])) 建议和代码更正也欢迎 谢谢大家!
proxy
宏来执行此操作,因此我们有如下内容:
(def painting-panel
(proxy [JPanel] []))
建议和代码更正也欢迎
谢谢大家!
(let [click (ref nil)
panel (proxy [javax.swing.JPanel] []
(paintComponent [g]
(proxy-super paintComponent g)
(.drawImage g (.getImage
(javax.swing.ImageIcon. "play.png"))
0 0 (.getWidth this) (.getHeight this) nil)
(if @click
(.fillRect g (:x @click) (:y @click) 10 10))))]
(.addMouseListener panel
(proxy [java.awt.event.MouseAdapter] []
(mouseClicked [e]
(let [p (.getPoint e)]
(dosync (ref-set click {:x (.x p), :y (.y p)})))
(javax.swing.SwingUtilities/invokeLater #(.repaint panel)))))
(doto (javax.swing.JFrame.)
(.setContentPane panel)
(.setSize 200 200)
(.show)))
(let [click (ref nil)
panel (proxy [javax.swing.JPanel] []
(paintComponent [g]
(proxy-super paintComponent g)
(.drawImage g (.getImage
(javax.swing.ImageIcon. "play.png"))
0 0 (.getWidth this) (.getHeight this) nil)
(if @click
(.fillRect g (:x @click) (:y @click) 10 10))))]
(.addMouseListener panel
(proxy [java.awt.event.MouseAdapter] []
(mouseClicked [e]
(let [p (.getPoint e)]
(dosync (ref-set click {:x (.x p), :y (.y p)})))
(javax.swing.SwingUtilities/invokeLater #(.repaint panel)))))
(doto (javax.swing.JFrame.)
(.setContentPane panel)
(.setSize 200 200)
(.show)))