Quelle est la meilleure façon de créer des interfaces graphiques dans Clojure ?
Existe-t-il un exemple de wrapper Swing ou SWT fonctionnel ? Ou une intégration avec la description déclarative de l'interface graphique JavaFX qui pourrait être facilement enveloppée dans des expressions s en utilisant une macrologie?
Des tutoriels?
java
user-interface
lisp
clojure
Marko
la source
la source
Stuart Sierra a récemment publié une série d'articles de blog sur le développement de l'interface graphique avec clojure (et swing). Commencez ici: http://stuartsierra.com/2010/01/02/first-steps-with-clojure-swing
la source
Si vous voulez faire de la programmation GUI, je pointerais vers le convertisseur de température ou la colonie de fourmis .
Beaucoup de choses dans Swing sont effectuées par sous-classification, en particulier si vous créez des composants personnalisés. Pour cela, il existe deux fonctions / macros essentielles: proxy et gen-class .
Maintenant, je comprends où vous allez avec la manière la plus Lispy. Je ne pense pas qu'il y ait encore quelque chose comme ça. Je déconseillerais fortement d'essayer de créer un cadre grandiose de création d'interface graphique à la CLIM , mais pour faire quelque chose de plus Lispy: commencez à écrire votre application Swing et résumez vos modèles communs avec des macros. En faisant cela, vous pouvez vous retrouver avec un langage pour écrire votre type d'interface graphique, ou peut-être des éléments très génériques qui peuvent être partagés et évolués.
Une chose que vous perdez lors de l'écriture des interfaces graphiques dans Clojure est l'utilisation d'outils comme Matisse. Cela peut être un point fort pour écrire certaines parties en Java (l'interface graphique) et certaines parties en Clojure (la logique). Ce qui est en fait logique, car dans la logique, vous serez en mesure de créer un langage pour votre type de logique en utilisant des macros et je pense qu'il y a plus à gagner qu'avec l'interface graphique. Évidemment, cela dépend de votre application.
la source
Personne ne l'a encore suggéré, alors je le ferai: Navigateur comme plate-forme d'interface utilisateur. Vous pouvez écrire votre application dans Clojure, y compris un serveur HTTP, puis développer l'interface utilisateur en utilisant tout ce qui va du HTML au hoquet , ClojureScript et l'une des milliards de bibliothèques JS dont vous avez besoin. Si vous vouliez un comportement de navigateur cohérent et un "look'n'feel" de l'application de bureau, vous pouvez regrouper Chrome avec votre application .
Cela semble être la façon dont Light Table est distribuée.
la source
Depuis cette page :
Et, bien sûr, il vaudrait la peine de regarder la section interopérabilité du site Web de clojure.
la source
Il existe un wrapper pour MigLayout dans clojure contrib. Vous pouvez également jeter un oeil à cet essentiel . Je suis en train de mettre en place le code que j'écris pendant que j'apprends le swing / miglayout.
Exemple de dsm réécrit de manière lispy en utilisant contrib.swing-utils
la source
Il y a eu des discussions sur la liste de diffusion sur quelques implémentations de Cells (à la Kenny Tilton's Cells ). C'est une manière assez intéressante de faire de la programmation GUI.
la source
Je préfère opter pour clojurefx, c'est un peu prématuré, mais cela fonctionne et vous fait gagner du temps.
J'ai commencé mon interface graphique avec la bascule, puis j'ai essayé un autre composant dans clojurefx.
J'ai terminé les deux et je suis convaincu que je vais refactoriser la bascule en clojurefx.
Après tout, JavaFX est la voie à suivre.
Il semble plus léger que la bascule. Ou du moins, l'écrire ...
Les liaisons fonctionnent, les écouteurs fonctionnent, la plupart des composants fonctionnent, sinon, utilisez simplement l'une des macros pour créer un constructeur pour ce cas particulier et le travail effectué. Ou, si vous trouvez cela difficile, écrivez quelques méthodes en Java et demandez de l'aide pour améliorer clojurefx.
Le gars qui a écrit clojurefx est occupé en ce moment, mais vous pouvez bifurquer le projet et faire quelques corrections.
la source
Voici un autre exemple très basique d'emballage de balançoire:
la source
Je me suis posé la même question d'écrire une interface graphique dans Clojure avec Swing et j'ai trouvé le signe de la bibliothèque
Il vous permet de représenter votre modèle de domaine sous la forme d'une structure de données Clojure unique enveloppée dans un atome.
Voir les exemples ici .
la source
J'ai développé une applet Java dans laquelle tout est écrit en Clojure sauf le code de l'applet, qui est écrit en Java. L'applet invoque les rappels du code Clojure de init, paint, etc. à partir des hooks de java pour les méthodes définies par le modèle de l'applet. Donc, le code finit par être Clojure à 99,999% et vous n'avez pas du tout à penser au petit morceau Java pour la plupart.
Il y a quelques inconvénients à cette approche, que j'espère discuter plus en détail sur le groupe Clojure Google. Je pense que les développeurs de Clojure devraient inclure une manière native de créer des applications. À l'heure actuelle, vous pouvez faire tout ce que vous voulez dans l'interface graphique à partir de la REPL, mais si vous voulez une application graphique livrable, il est nécessaire d'écrire du Java pour appeler le code Clojure. En outre, il semble que l'architecture d'une applet Java vous oblige à sortir des meilleures pratiques plus idiomatiques de Clojure, vous obligeant à utiliser un état mutable, etc.
Mais aussi, je ne suis pas encore très loin avec Clojure et il se peut que ce soit possible et que je n'ai tout simplement pas encore découvert comment le faire correctement.
la source
Mon environnement d'interface utilisateur Clojure préféré utilise IO.js (Node for ES6) + Electron (Container) + Quiescent (wrapper ReactJS) .
la source
Je n'ai donc pas vu Fn-Fx sur cette liste, de Timothy Baldridge (halgiri). Il s'agit d'une bibliothèque Clojure fournissant une abstraction fonctionnelle sur JavaFX.
Il peut être trouvé sur Github à https://github.com/halgari/fn-fx .
Pour l'utiliser, assurez-vous que vous utilisez une version récente de Java (1.8 90+) et ajoutez une dépendance au dépôt github en ajoutant ce qui suit à votre project.clj:
Je l'ai essayé et cela fonctionne hors de la boîte.
la source
Clojure et SWT est la meilleure approche pour faire des GUI. Essentiellement, SWT est une approche de style plug and play pour le développement de logiciels.
la source
Je ne pense pas qu'il y ait de langage officiel, mais personnellement, je profiterais du fait que j'utilise l'un des langages les plus puissants au monde et imaginez à quoi ressemblerait le code d'interface graphique parfait:
Votre idée serait différente, mais cela devrait, espérons-le, vous donner une idée.
la source
Je sais que vous faites allusion à des solutions de bureau classiques, mais le Web correspond assez bien à clojure. J'ai écrit une application audio complète dans laquelle tout est connecté de sorte que si vous ajoutez de la musique au dossier audio, elle se reflète dans l'interface utilisateur Web. Dire simplement que l'application de bureau n'est pas le seul moyen :)
la source