есть! Я создаю приложение для обработки изображений в режиме Swing / Clojure, и сейчас мне нужно разработать панель изображений, в которой я могу щелкать и вычислять данные. Благодаря coobird у меня теперь есть хорошая идея о том, как сделать это в Java, но у меня до сих пор не возникает проблем с его интеграцией с Clojure.
Давайте посмотрим, как coobird предложил мне это сделать. Во-первых, мы должны расширить класс в Java. В clojure, мы делаем это с макросом proxy
, поэтому у нас будет что-то вроде этого:
(def painting-panel
(proxy [JPanel] []))
Следующим шагом является создание конструктора класса и установка некоторых переменных.
Я могу определять функции после второго аргумента прокси, но как я могу создать конструктор? Является ли painting-панель названием этого класса (поэтому имя функции, которую я должен создать)?
Как мне работать с переменными класса? Должен ли я определить их с помощью 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)))))))))
Предложения и исправления кода также приветствуются!
Спасибо!