Was ist der beste Weg, um GUIs in Clojure zu machen ?
Gibt es ein Beispiel für einen funktionalen Swing- oder SWT- Wrapper? Oder eine Integration in die deklarative JavaFX- GUI-Beschreibung, die mithilfe einer Makrologie leicht in S-Ausdrücke eingeschlossen werden kann?
Irgendwelche Tutorials?
java
user-interface
lisp
clojure
Marko
quelle
quelle
Stuart Sierra hat kürzlich eine Reihe von Blog-Posts zur GUI-Entwicklung mit Clojure (und Swing) veröffentlicht. Beginnen Sie hier: http://stuartsierra.com/2010/01/02/first-steps-with-clojure-swing
quelle
Wenn Sie eine GUI-Programmierung durchführen möchten, würde ich auf Temperature Converter oder die Ameisenkolonie verweisen .
Viele Dinge in Swing werden durch Unterklassifizierung erledigt, insbesondere wenn Sie benutzerdefinierte Komponenten erstellen. Dafür gibt es zwei wesentliche Funktionen / Makros: Proxy und Gen-Klasse .
Jetzt verstehe ich, wohin du mit dem lispy Weg gehst. Ich glaube, so etwas gibt es noch nicht. Ich würde dringend davon abraten, ein grandioses GUI-Framework a-la- CLIM zu erstellen zu erstellen, aber etwas Lispigeres zu tun: Schreiben Sie Ihre Swing-Anwendung und abstrahieren Sie Ihre allgemeinen Muster mit Makros. Wenn Sie dies tun, erhalten Sie möglicherweise eine Sprache, in der Sie Ihre Art von GUIs schreiben können, oder vielleicht einige sehr allgemeine Dinge, die geteilt werden und wachsen können.
Eine Sache, die Sie beim Schreiben der GUIs in Clojure verlieren, ist die Verwendung von Tools wie Matisse. Dies kann ein starker Hinweis darauf sein, einige Teile in Java (die GUI) und einige Teile in Clojure (die Logik) zu schreiben. Was tatsächlich Sinn macht, da Sie in der Logik mithilfe von Makros eine Sprache für Ihre Art von Logik erstellen können, und ich denke, dass es dort mehr zu gewinnen gibt als mit der GUI. Natürlich hängt es von Ihrer Anwendung ab.
quelle
Noch hat es niemand vorgeschlagen, also werde ich: Browser als UI-Plattform. Sie können Ihre App in Clojure schreiben, einschließlich eines HTTP-Servers, und dann die Benutzeroberfläche mit HTML, Schluckauf , ClojureScript und den Milliarden von JS-Bibliotheken entwickeln, die Sie benötigen. Wenn Sie ein konsistentes Browserverhalten und "Desktop-App-Look'n'Feel" wünschen, können Sie Chrome mit Ihrer App bündeln .
So scheint Light Table verteilt zu sein.
quelle
Von dieser Seite :
Und natürlich lohnt es sich, den Abschnitt zur Interoperabilität auf der Website von clojure zu lesen.
quelle
Es gibt einen Wrapper für MigLayout in Clojure Contrib. Sie können sich auch dieses Wesentliche ansehen . Ich stelle im Grunde den Code auf, den ich schreibe, während ich Swing / Miglayout lerne.
Das Beispiel von dsm wurde mit Contrib.swing-Utils lispy neu geschrieben
quelle
Auf der Mailingliste wurde über einige Implementierungen von Cells (a la Kenny Tilton's Cells ) gesprochen. Es ist eine ziemlich nette Art, GUI-Programmierung zu machen.
quelle
Ich würde mich lieber für Clojurefx entscheiden, es ist etwas verfrüht, aber es funktioniert und spart Ihnen Zeit.
Ich habe meine GUI mit Wippe gestartet und dann eine andere Komponente in clojurefx ausprobiert.
Ich habe beide beendet und bin überzeugt, dass ich die Wippe zu Clojurefx umgestalten werde.
Schließlich ist JavaFX der richtige Weg.
Es fühlt sich leichter an als Wippe. Oder zumindest schreiben ..
Bindungen funktionieren, Listener funktionieren, die meisten Komponenten funktionieren, andernfalls verwenden Sie einfach eines der Makros, um einen Konstruktor für diesen speziellen Fall und die erledigte Arbeit zu erstellen. Wenn Sie Schwierigkeiten haben, schreiben Sie einige Methoden in Java und bitten Sie um Hilfe, um clojurefx zu verbessern.
Der Typ, der clojurefx geschrieben hat, ist gerade beschäftigt, aber Sie können das Projekt abspalten und einige Korrekturen vornehmen.
quelle
Hier ist ein weiteres sehr einfaches Beispiel für Swing Wrapping:
quelle
Ich stellte mir die gleiche Frage, wie ich in Clojure mit Swing eine grafische Benutzeroberfläche schreiben sollte, und kam auf die Signatur der Bibliothek
Sie können Ihr Domänenmodell als einzelne Clojure-Datenstruktur darstellen, die in ein Atom eingeschlossen ist.
Siehe die Beispiele hier .
quelle
Ich habe ein Java-Applet entwickelt, in dem alles in Clojure geschrieben ist, außer dem Applet-Code, der in Java geschrieben ist. Das Applet ruft die Rückrufe des Clojure-Codes von init, paint usw. aus den Java-Hooks für die vom Applet-Modell definierten Methoden auf. Der Code lautet also zu 99,999 Prozent Clojure, und Sie müssen größtenteils überhaupt nicht an das winzige Java-Teil denken.
Dieser Ansatz weist einige Nachteile auf, die ich hoffentlich in der Clojure Google Group ausführlicher erläutern werde. Ich denke, die Clojure-Entwickler sollten eine native Methode zum Erstellen von Anwendungen einbeziehen. Gegenwärtig können Sie mit der REPL beliebige GUI-Aufgaben ausführen. Wenn Sie jedoch eine lieferbare GUI-Anwendung wünschen, müssen Sie Java schreiben, um den Clojure-Code aufzurufen. Außerdem scheint es so, als würde Sie die Architektur eines Java-Applets außerhalb der idiomatischeren Best Practices von Clojure zwingen, sodass Sie einen veränderlichen Status usw. verwenden müssen.
Aber auch mit Clojure bin ich noch nicht weit und es könnte sein, dass dies möglich ist und ich noch nicht herausgefunden habe, wie ich es richtig machen soll.
quelle
Meine bevorzugte Clojure-UI-Umgebung verwendet IO.js (Knoten für ES6) + Electron (Container) + Quiescent (ReactJS-Wrapper) .
quelle
Also habe ich Fn-Fx von Timothy Baldridge (halgiri) auf dieser Liste nicht gesehen. Dies ist eine Clojure-Bibliothek, die eine funktionale Abstraktion über JavaFX bietet.
Es kann auf Github unter https://github.com/halgari/fn-fx gefunden werden .
Stellen Sie zur Verwendung sicher, dass Sie eine aktuelle Version von Java (1.8 90+) verwenden, und fügen Sie dem Github-Repo eine Abhängigkeit hinzu, indem Sie Ihrer project.clj Folgendes hinzufügen:
Ich habe es versucht, und es funktioniert sofort.
quelle
Clojure und SWT sind der beste Ansatz für GUI (s). Im Wesentlichen ist SWT ein Plug-and-Play-Ansatz für die Entwicklung von Software.
quelle
Ich glaube nicht, dass es eine offizielle gibt, aber ich persönlich würde die Tatsache ausnutzen, dass ich eine der mächtigsten Sprachen der Welt verwende und mir nur vorstellen, wie der perfekte GUI-Code aussehen würde:
Ihre Idee würde sich unterscheiden, aber dies sollte Ihnen hoffentlich eine Vorstellung davon geben.
quelle
Ich weiß, dass Sie auf klassische Desktop-Lösungen hinweisen, aber das Web passt recht gut zu Clojure. Ich habe eine vollständige Audioanwendung geschrieben, in der alles angeschlossen ist, sodass Musik, die Sie dem Audioordner hinzufügen, in der Web-Benutzeroberfläche angezeigt wird. Nur zu sagen, dass Desktop-Anwendung nicht der einzige Weg ist :)
quelle