2009-06-29 16 views
8

¿Alguna vez ha intentado usar Swing para terminar cambiando de curso porque simplemente no podía hacer lo que quería?GUI de Java Swing en Mac OS X

Soy bastante nuevo en Swing, ya que solo lo he usado para proyectos escolares hace más de 5 años, pero parece que Swing ha recorrido un largo camino para proporcionar una apariencia más nativa, tanto que estoy considerando usándolo para desarrollar la GUI para una aplicación en Mac OS X. Sin embargo, antes de hacerlo, quería ver si alguien se había topado con problemas importantes que les impidieran usar Swing.

Justo al lado de la parte superior de la cabeza, algunas posibilidades:

  • problemas en desarrollo de componentes personalizados que parecían "derecho"
  • interacciones Bad con las aplicaciones nativas y widgets
  • Los problemas de rendimiento (falta de respuesta, vuelven a pintar problemas)
  • Incapacidad para imitar comportamientos nativos (como la interacción del muelle)
+1

@alanlcode: No me gustaría llamar a estos sorprendentes, pero cuando se quiere soportar Mac OS X 10.4,5 y 6 y 32 bit que no tienen Java 6 y necesitan cosas como buena apariencia * ordenable * JTable, es un *mucho trabajo. Luego está el problema de la piggyness de memoria y la lentitud, GC que parece tardar más en OS X que en otra plataforma, etc. He considerado cambiar pero tener el mismo código fuente para Windows, OS X y Linux es suficiente para seguir usando Swing/Java :) Además, consideré hacer más Obj-C, pero ir a XCode o cualquier otra cosa de IntelliJ IDEA sería como volver a la edad de piedra. – SyntaxT3rr0r

Respuesta

8

oscilación no se va a dar la fidelidad perfecta con el sistema operativo anfitrión. Sun simplemente no puede dedicar los considerables recursos necesarios para hacerlo. Mi impresión es que Swing ha mejorado mucho, pero todavía se verá fuera de lugar de forma predeterminada.

El mínimo requerido para tener la esperanza de pasar como una aplicación de Mac:

  • paquete de su .jar en un .app
  • establecer la L & F a defecto del sistema
  • conjunto apple.laf. useScreenMenuBar propiedad en true
    • debe hacer esto antes de cualquier código de interfaz de usuario

La interacción del acoplamiento no existe en Java estándar. Deberá usar el puente Cocoa-Java de Apple, que ya no es compatible. No tengo idea de cuán manejable es JNI en OS X, que es la única alternativa real.

El rendimiento no debería ser un problema. Arrastra & Drop es probablemente tan peludo en OS X como en cualquier otro lado.

Básicamente, si se dirige explícitamente a OS X, es mejor que use Objective-C. Está lejos de ser imposible construir una aplicación en OS X usando Java & Swing, pero es mucho trabajo para que se vea "nativa".

+0

Gracias por las ideas. Mi ímpetu original para probar Java en la Mac fue ganar experiencia con Clojure, que parece ser un lenguaje interesante. Decidí usar Objective-C para esta GUI, y tal vez abordar Clojure en algo no gráfico. – alanlcode

4

@ Kevin ++

Utilizando cacao es probablemente mejor

  • Si usted quiere que se vea exactamente como aplicaciones nativas
  • si se dirigen sólo el Mac

Si tiene la intención para distribuir sus aplicaciones para Windows, Linux, etc. Swing es una opción decente. Es mejor, pero como en cualquier conjunto de herramientas, todavía hay problemas. Nunca obtendrá un aspecto realmente nativo y se sentirá con él, lo mismo aplica para herramientas de interfaz de usuario similares que dicen ser "multiplataforma".

Las Directrices de Apple para el desarrollo de Java se pueden encontrar here.

6

Como Kevin y John dijeron que debes probar Objective-C, Cocoa y XCode si solo estás apuntando a usuarios de Mac. El developer tools para Mac está disponible gratuitamente.

Si usted quiere (o tiene que) el uso de Java y Swing puede utilizar algunas bibliotecas para crear una interfaz gráfica de usuario que se ve bien en los Mac:

Para Al implementar su aplicación, debe leer los documentos JarBundler.

Sin embargo, en este caso, la interacción con el puerto y las aplicaciones nativas es muy limitada.

Algunos otros enlaces buenos son: