GUI в Scala/Groovy/Clojure
В прошлый раз мне приходилось иметь дело с Java в 2005 году, и с тех пор я забыл обо всем этом.
Сегодня мне нужно создать графическое приложение на вершине Java. Я думаю, что лучше использовать один из языков Scala/Groovy/Clojure.
Вопрос: какой из них лучше подходит для настольных графических программ? Моя программа преобразует и отображает серию jpeg/png файлов + будет ~ 10 диалогов (с множеством опций в каждом со всеми возможными виджетами).
Основным требованием является компактность: мне не нравится писать дюжину строк кода только для рисования простого кадра с помощью кнопки. Мой фон в графическом интерфейсе (в основном) Tcl/Tk и GTK +.
Ответы
Ответ 1
Scala поставляется с довольно полными примерами приложений для основных элементов GUI, которые вы можете запустить, набрав scala scala.swing.test.UIDemo
в командной строке. Вы можете просмотреть исходный код для них здесь.
Вы также можете посмотреть этот документ, чтобы получить представление о принципах дизайна Scala Swing wrappers.
Ответ 2
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я программист Clojure. Я явно предвзято.
Из всех этих языков, я думаю, Clojure и Groovy, вероятно, самые компактные. Scala - это язык с фигурными скобками, такой как Java, поэтому он имеет тенденцию занимать немного больше места. Однако он нигде не близок, как Java, и я думаю, что Scala довольно классный. Я знаю, что Scala имеет swing wrapper. Я никогда не делал разработку графического интерфейса в Scala, поэтому я не могу сказать, как он себя чувствует.
Я сделал некоторое развитие swing в Clojure, и на самом деле это не так много. Использование swing прямо из Clojure может быть утомительным, пока вы не напишете себе некоторые абстракции, но в целом приложения для swing меньше, чем то же самое в Java, потому что код Clojure имеет тенденцию быть короче и более кратким, чем Java-код.
Clojure также имеет некоторые обертки, чтобы сделать разработку качания более Clojury. Один из них clj-swing. Я видел код, написанный с его использованием, и это довольно круто, и определенно более кратким, чем прямой interop.
Теперь я не знаю Groovy. Я действительно ничего не знаю об этом, но я знаю, что он более компактный, чем Java, поэтому я предполагаю, что разработка графического интерфейса будет довольно компактной.
Я думаю, что Clojure - это безопасная ставка. С помощью clj-swing или даже непосредственно с помощью инструментария Java GUI напрямую будет действительно компактным по сравнению с Java, а способность создавать абстракции по некомпактным материалам с помощью макросов определенно является огромным плюсом. Clojure имеет мой голос.
Ответ 3
Groovy имеет структуру Griffon, которая использует условную конфигурацию для создания приложений GUI на JVM. Он похож на grails/rails, но на богатый графический интерфейс, а не на веб-приложение.
Ответ 4
Groovy имеет что-то, называемое swing builder для упрощения программирования графического интерфейса. Вот фрагмент кода примера с веб-сайта groovy, он создает кадр с кнопкой и подсчитывает количество раз, когда вы нажимаете на него:
int count = 0
new SwingBuilder().edt {
frame(title:'Frame', size:[300,300], show: true) {
borderLayout()
textlabel = label(text:"Click the button!", constraints: BL.NORTH)
button(text:'Click Me',
actionPerformed: {count++; textlabel.text = "Clicked ${count} time(s)."; println "clicked"},
constraints:BL.SOUTH)
}
}
Ответ 5
В настоящее время я разрабатываю приложение SWT в Scala и очень люблю его. Но я ожидаю, что Clojure будет еще более компактным.
Ответ 6
Я писал графический интерфейс, используя Clojure напрямую с Swing. До сих пор он работал очень хорошо. Я также написал некоторые пользовательские компоненты пользовательского интерфейса на Java, которые очень легко интегрировались с частью Clojure базы кода.
Я также считаю, что clj-swing выглядит великолепно - возможно, проще, чем использовать Swing напрямую, если у вас нет предыдущего опыта Swing.