dort! Ich baue gerade eine Bildverarbeitungsanwendung in Swing/Clojure, und jetzt muss ich ein Bildfenster entwickeln, in dem ich Daten anklicken und berechnen kann. Dank coobird habe ich jetzt eine gute Idee, wie man es in Java macht, aber ich bekomme immer noch nicht viele Probleme bei der Integration mit Clojure.Bildverarbeitung, Erweiterung JPanel und Simulationsklassen in Clojure
Werfen wir einen Blick darauf, wie Cookbird mich vorgeschlagen hat. Zuerst sollten wir eine Klasse in Java erweitern. In clojure, tun wir dies mit dem proxy
Makro, so würden wir so etwas wie dieses:
(def painting-panel (proxy [JPanel] []))
Der nächste Schritt ist es, den Konstruktor der Klasse zu erstellen und einige Variablen gesetzt.
I Funktionen nach dem zweiten Argument von Proxy definieren kann, aber wie kann ich den Konstruktor erstellen? Ist painting-panel der Name dieser Klasse (daher der Name der Funktion, die ich erstellen soll)?
Wie kann ich mit Klassenvariablen umgehen? Sollte ich sie mit einer
let
definieren, wie ich es getan habe?Sind
this
undsuper
für mich verfügbar, wie ich unten getan habe?
(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)))))))))
Vorschläge und Code-Korrekturen sind auch willkommen!
Vielen Dank!
Ich liebe dich, Jungs. Ernst. – konr
Ich liebe dich auch. –