Каков наилучший способ сделать GUI в Clojure ?
Есть ли пример какой-нибудь функциональной оболочки Swing или SWT ? Или какая-то интеграция с декларативным описанием графического интерфейса JavaFX, которую можно легко обернуть в s-выражения с помощью некоторой макрологии?
Есть учебники?
java
user-interface
lisp
clojure
Marko
источник
источник
Стюарт Сьерра недавно опубликовал серию постов в блоге по GUI-разработке с clojure (и раскачкой). Начните здесь: http://stuartsierra.com/2010/01/02/first-steps-with-clojure-swing
источник
Если вы хотите заниматься программированием с помощью графического интерфейса, я бы указал на « Конвертер температуры» или колонию муравьев .
Многие вещи в Swing выполняются подклассами, особенно если вы создаете пользовательские компоненты. Для этого есть две основные функции / макросы: proxy и gen-class .
Теперь я понимаю, куда ты идешь с Лиспой. Я не думаю, что есть что-то подобное еще. Я бы настоятельно рекомендовал не пытаться создать грандиозную среду построения GUI в стиле CLIM , но делать что-то более Lispy: начните писать свое приложение Swing и абстрагируйте свои общие шаблоны с помощью макросов. При этом у вас может получиться язык для написания графического интерфейса пользователя, или, может быть, какой-то очень общий материал, которым можно делиться и расти.
Одна вещь, которую вы теряете при написании GUI в Clojure, - это использование таких инструментов, как Matisse. Это может быть убедительным указанием для написания некоторых частей на Java (GUI) и некоторых частей на Clojure (логика). Что на самом деле имеет смысл, так как в логике вы сможете создать язык для вашей логики, используя макросы, и я думаю, что здесь есть что-то большее, чем в GUI. Очевидно, это зависит от вашего приложения.
источник
Никто еще не предложил это, поэтому я буду: Браузер как платформа пользовательского интерфейса. Вы можете написать свое приложение на Clojure, включая HTTP-сервер, а затем разработать пользовательский интерфейс, используя что угодно, от HTML до hiccup , ClojureScript и любой из миллиардов JS-библиотек, которые вам нужны. Если вам нужно постоянное поведение браузера и «внешний вид приложения для ПК», вы можете связать Chrome с вашим приложением .
Это похоже на то, как Light Table распространяется.
источник
С этой страницы :
И, конечно же, стоило бы взглянуть на раздел о функциональной совместимости на сайте clojure.
источник
Существует оболочка для MigLayout в contrib clojure. Вы также можете взглянуть на эту суть . Я в основном выкладываю любой код, который пишу, когда изучаю свинг / миграцию.
Пример dsm переписан без лишних слов с помощью contrib.swing-utils
источник
В списке рассылки говорилось о нескольких реализациях Cells (a la Kenny Tilton's Cells ). Это довольно аккуратный способ программирования GUI.
источник
Я бы предпочел пойти на clojurefx, это немного преждевременно, но это работает и экономит ваше время.
Я начал свой графический интерфейс с качелей, а затем попробовал другой компонент в clojurefx.
Я закончил оба, и я убежден, что я собираюсь реорганизовать качели в clojurefx.
В конце концов, JavaFX - это путь вперед.
Это легче, чем качели. Или, по крайней мере, писать это ..
Привязки работают, слушатели работают, большинство компонентов работают, в противном случае, просто используйте один из макросов для создания конструктора для этого конкретного случая и выполненной работы. Или, если вам трудно, напишите несколько методов на Java и попросите помочь улучшить clojurefx.
Парень, который написал clojurefx, сейчас занят, но вы можете раскошелиться на проект и внести некоторые исправления.
источник
Вот еще один очень простой пример свинга:
источник
Я задал себе тот же вопрос написания графического интерфейса в Clojure с Swing и придумал библиотечную подпись
Это позволяет использовать представление вашей доменной модели в виде единой структуры данных Clojure, заключенной в атом.
Смотрите примеры здесь .
источник
Я разрабатывал Java-апплет, в котором все написано на Clojure, кроме кода апплета, написанного на Java. Апплет вызывает обратные вызовы кода Clojure для init, paint и т. Д. Из хуков java для тех методов, которые определены моделью апплета. Таким образом, код заканчивается 99,999 процентами Clojure, и вам больше не нужно думать о крошечной части Java вообще.
У этого подхода есть некоторые недостатки, которые я надеюсь обсудить более подробно в Google Clojure. Я думаю, что разработчики Clojure должны включать собственный способ создания приложений. В настоящее время вы можете делать все, что вам нравится в GUI, из REPL, но если вы хотите доставляемое приложение GUI, необходимо написать немного Java для вызова кода Clojure. Кроме того, похоже, что архитектура Java-апплета вынуждает вас выйти за рамки более идиоматических рекомендаций Clojure, требующих использования изменяемого состояния и т. Д.
Но также я еще не очень близок с Clojure, и, возможно, это возможно, и я просто еще не понял, как это сделать правильно.
источник
Моя предпочтительная среда пользовательского интерфейса Clojure использует IO.js (узел для ES6) + Electron (контейнер) + Quiescent (оболочка ReactJS) .
источник
Так что я не видел Fn-Fx в этом списке, от Тимоти Болдриджа (халгири). Это библиотека Clojure, обеспечивающая функциональную абстракцию над JavaFX.
Его можно найти на Github по адресу https://github.com/halgari/fn-fx .
Чтобы использовать, убедитесь, что вы используете последнюю версию Java (1.8 90+) и добавьте зависимость к репозиторию github, добавив в свой project.clj следующее:
Я попробовал это, и это работает из коробки.
источник
Clojure и SWT - лучший подход для создания GUI. По сути, SWT - это стиль «включай и работай» для разработки программного обеспечения.
источник
Я не думаю, что есть официальный, но лично я бы воспользовался тем, что использую один из самых мощных языков в мире, и просто представляю, как будет выглядеть идеальный графический код:
Ваша идея будет отличаться, но, надеюсь, вышеизложенное даст вам некоторое представление.
источник
Я знаю, что вы намекаете на классические настольные решения, но веб вполне подходит для clojure. Я написал полное аудио приложение, в котором все подключено, так что если вы добавляете музыку в аудио папку, это отражается в веб-интерфейсе. Просто сказать, что настольное приложение не единственный способ :)
источник