2010-07-24 13 views
28

La última vez que tuve que lidiar con Java fue en 2005 y desde entonces me olvidé de casi todo.GUI en Scala/Groovy/Clojure

Hoy necesito construir una aplicación GUI en la parte superior de Java. Supongo que es mejor usar uno de los idiomas de Scala/Groovy/Clojure.

La pregunta es: ¿cuál de ellos es mejor para la programación de GUI de escritorio? Mi programa transformará y mostrará una serie de archivos jpeg/png + habrá ~ 10 cuadros de diálogo (con toneladas de opciones en cada uno con todos los widgets posibles).

El requisito principal es la compacidad: odio escribir una docena de líneas de código solo para dibujar un marco simple con un botón. Mi experiencia en GUI es (principalmente) Tcl/Tk y GTK +.

Respuesta

18

Scala viene con aplicaciones de muestra bastante completas para los elementos básicos de la GUI, que puede ejecutar escribiendo scala scala.swing.test.UIDemo en la línea de comando. Puede navegar por el código fuente para ellos here.

También puede consultar this document para tener una idea de los principios de diseño detrás de las envolturas Swing de Scala.

+0

A) Gracias por el pequeño huevo de pascua sobre la demostración de UI. No tenía idea de que existiera. ¿La fuente está disponible? B) Empecé a usar las envolturas oscilantes Scala este fin de semana después de aproximadamente cinco años de experiencia estándar de swing en Java. Hay más que un poco de curva de aprendizaje; podría ser más fácil si eres nuevo en la programación de GUI. Haré una publicación en el blog que pronto resaltará algunas de las diferencias. – I82Much

+0

@ I82Much La respuesta tiene un enlace al código fuente. También debe venir con distribuciones estándar de Scala, que incluyen el código fuente para el compilador y las bibliotecas, y se puede obtener también con git y subversión. –

+1

@ I82Much También, me encantaría ver esa publicación en el blog. Creo que a Scala le faltan entradas de blog sobre programación de GUI. –

20

DESCARGO DE RESPONSABILIDAD: Soy programador de Clojure. Obviamente soy parcial.

De todos estos idiomas, creo que Clojure y Groovy son probablemente los más compactos. Scala es un lenguaje de corchetes como Java, por lo que ocupa un poco más de espacio. Sin embargo, no es tan detallado como Java, y creo que Scala es bastante impresionante. Sé que Scala tiene una envoltura de columpios. Nunca hice desarrollo de GUI en Scala, así que no puedo decir cómo se siente realmente.

He hecho algunos desarrollos de swing en Clojure, y realmente no toma mucho. Usar swing directo de Clojure puede ser tedioso hasta que se escriba algunas abstracciones, pero en general, las aplicaciones de swing son más pequeñas que lo mismo en Java porque el código de Clojure tiende a ser más corto y más conciso que el código de Java.

Clojure también tiene algunas envolturas de tipo para hacer que el desarrollo del swing sea más Clojury. Uno de los cuales es clj-swing. He visto un código escrito usándolo, y es bastante genial, y definitivamente más conciso que interoperabilidad directa.

Ahora, no sé Groovy. Realmente no sé mucho al respecto, pero sé que es más compacto que Java, así que imagino que el desarrollo de GUI también sería bastante compacto.

Creo que Clojure es una apuesta segura. Con clj-swing, o incluso el uso directo de los juegos de herramientas GUI de Java, va a ser realmente compacto en comparación con Java, y la capacidad de crear abstracciones sobre cosas no compactas con macros es definitivamente una gran ventaja. Clojure tiene mi voto.

+0

personal, creo que Clojure es demasiado oscura e inmaduro para el código de producción que puede necesitan muchos desarrolladores para mantenerlos durante mucho tiempo (aunque no sé si eso se aplica a este proyecto). No digo que sea un lenguaje bueno/malo, pero es muy diferente de Java para que un desarrollador de Java lo recoja fácilmente. –

+7

Si él tiene la opción de estos idiomas en el trabajo, obviamente, no sienten que sea demasiado "oscuro e inmaduro para el código de producción". Creo que deberías dejarlo decidir, ya que es su aplicación. Más allá de eso, sé de varias compañías que usan Clojure como su/uno de sus idiomas principales, y están orgullosos de ello. – Rayne

+1

He usado balancín (https://github.com/daveray/seesaw) antes, es extremadamente compacto y elegante. También funciona muy bien con las estructuras de datos de Clojure, lo que permite una unión fácil entre los átomos y los componentes oscilantes en ambas direcciones. – deterb

4

Actualmente estoy desarrollando una aplicación SWT en Scala y me gusta. Pero espero que Clojure sea aún más compacto.

9

Groovy tiene el marco Griffon que usa la convención sobre la configuración para crear aplicaciones GUI en la JVM. Es similar a los griales/rieles, pero para una interfaz gráfica de usuario rica en lugar de una aplicación web.

+0

No sé hablar de griffon, pero ¿no dijiste que querían tener envoltorios para jruby y clojure? Recuerda escuchar algo así. – nickik

+0

Griffon admite la programación de políglotas a través de complementos. Groovy, Java, Clojure, Scala, Mirah, Jython son algunos de los idiomas que puede usar con él. – aalmiray

3

He estado escribiendo una GUI usando Clojure directamente con Swing. Hasta ahora ha funcionado muy bien. También he escrito algunos componentes de IU personalizados en Java que han demostrado ser muy fáciles de integrar con la parte Clojure de la base de códigos.

También creo que clj-swing se ve genial, posiblemente más fácil que usar Swing directamente si no tienes experiencia Swing previa.

7

Groovy tiene algo llamado swing builder para facilitar la programación de la GUI. Aquí es una pieza de código de ejemplo desde el sitio web maravilloso, que crea un marco con un botón y cuenta el número de veces que haga clic en él:

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) 
    } 
}