GUI в Scala / Groovy / Clojure - PullRequest
30 голосов
/ 24 июля 2010

В прошлый раз мне приходилось иметь дело с Java в 2005 году, и с тех пор я почти все о ней забыл.

Сегодня мне нужно создать приложение с графическим интерфейсом поверх Java.Я думаю, что лучше использовать один из языков Scala / Groovy / Clojure.

Вопрос в том, : какой из них лучше подходит для программирования настольного графического интерфейса пользователя?Моя программа преобразует и отображает ряд файлов jpeg / png + будет ~ 10 диалогов (с кучей опций в каждом со всеми возможными виджетами).

Основное требование - компактность: я ненавижу писатьдюжина строк кода только для рисования простой рамки с кнопкой.Мой опыт работы в GUI (в основном) Tcl / Tk и GTK +.

Ответы [ 6 ]

20 голосов
/ 24 июля 2010

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я программист Clojure. Я явно предвзятый.

Я думаю, что из всех этих языков Clojure и Groovy являются наиболее компактными. Scala является языком фигурных скобок, таким как Java, поэтому он обычно занимает немного больше места. Тем не менее, он далеко не так многословен, как Java, и я думаю, что Scala довольно крута. Я знаю, что у Scala есть свинг-обертка. Я никогда не занимался разработкой GUI в Scala, поэтому я не могу точно сказать, каково это.

Я сделал несколько свинг-разработок в Clojure, и это на самом деле не занимает много времени. Использование Swing Direct из Clojure может быть утомительным, пока вы не напишите себе некоторые абстракции, но в целом Swing-приложения меньше, чем то же самое в Java, потому что код Clojure имеет тенденцию быть короче и более кратким, чем код Java.

У Clojure также есть своего рода обертки, чтобы сделать разработку свинга более Clojury. Одним из которых является clj-swing . Я видел некоторый код, написанный с его использованием, и он довольно крутой и определенно более краткий, чем прямое взаимодействие.

Теперь я не знаю Groovy. Я действительно ничего не знаю об этом, но я знаю, что он более компактен, чем Java, поэтому я думаю, что разработка GUI также будет довольно компактной.

Я думаю, что Clojure - безопасная ставка. С clj-swing или даже с непосредственным использованием Java GUI инструментарий будет очень компактным по сравнению с Java, и возможность создавать абстракции поверх некомпактных материалов с помощью макросов, безусловно, огромный плюс. Clojure имеет мой голос.

18 голосов
/ 24 июля 2010

Scala поставляется с довольно полными примерами приложений для базовых элементов графического интерфейса, которые вы можете запустить, набрав scala scala.swing.test.UIDemo в командной строке. Вы можете просмотреть исходный код для них здесь .

Вы также можете взглянуть на этот документ , чтобы получить представление о принципах дизайна оболочек Scala Swing.

9 голосов
/ 24 июля 2010

Groovy имеет инфраструктуру Griffon , которая использует соглашение по конфигурации для создания приложений GUI на JVM.Это похоже на grails / rails, но для богатого графического интерфейса, а не веб-приложения.

7 голосов
/ 28 июля 2010

В Groovy есть нечто, называемое Swing Builder для облегчения программирования с помощью графического интерфейса. Вот пример кода с отличного веб-сайта, он создает фрейм с кнопкой и подсчитывает количество нажатий на нее:

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)
  }
}
4 голосов
/ 24 июля 2010

В настоящее время я занимаюсь разработкой SWT-приложения на Scala, и оно мне очень нравится.Но я ожидаю, что Clojure будет еще более компактным.

3 голосов
/ 26 июля 2010

Я пишу графический интерфейс, используя Clojure напрямую с Swing. До сих пор это работало очень хорошо. Я также написал несколько пользовательских компонентов пользовательского интерфейса на Java, которые оказалось очень легко интегрировать с частью кода Clojure.

Я также думаю, что clj-swing выглядит великолепно - возможно, проще, чем использовать Swing напрямую, если у вас нет опыта работы с Swing.

...