Mientras hacía mi investigación previa para esta pregunta , descubrí que no hay mucha información bien organizada sobre las mejores prácticas de Java Swing en Internet. Así que supongo que le daré una oportunidad a Stack Exchange para construir esa Gran Lista.
¿Cuáles son las mejores prácticas del desarrollo Java Swing? ¿Qué has encontrado que funcione para ti y por qué?
Respuestas:
Solo puedo responder por lo que funcionó para mí. Otros comentaristas han señalado que las GUI de Java en general caen en el 'valle misterioso' de la apariencia y sensación no nativas, y no lo niego.
Haz buen uso de la API de acción. Le permite encapsular mejor las diferentes acciones que realizará su usuario y le permite conectarlos a atajos, teclas de aceleración, botones y otros objetos de entrada con mucha más facilidad.
Use un administrador de diseño apropiado. GridBagLayout es extremadamente poderoso, pero iría tan lejos como para decir que es imposible de mantener sin una cantidad excesiva de comentarios. Cuando ejecuto herramientas de análisis de código estático como Sonar sobre una aplicación GUI anterior que mantengo, siempre señala las cantidades masivas de números mágicos para que el diseño de GridBags sea el correcto. He tenido mucho éxito con GroupLayout, que evita tener que especificar la alineación perfecta de píxeles.
Si crees que necesitas un JDialog ... probablemente no lo necesites . Los cuadros de diálogo son horribles, en términos de experiencia del usuario: esta aplicación decidió usarlos para cada menú y forma, y hacer cumplir las reglas siempre en la cima de maneras extrañas. Esto se convirtió en una pesadilla de mantenimiento cuando realmente necesitábamos alertar algo sobre el menú. Haga clic en los cuadros de diálogo no enfocados y, por lo tanto, imperdibles.
Use SwingWorker en lugar de rodar su propio subproceso múltiple, cuando corresponda. Es muy fácil extender SwingWorker y realizar tareas de larga duración mientras se proporcionan actualizaciones periódicas a la GUI. Piense en descargar una actualización del cliente. Se encargará de la programación de subprocesos de trabajo por usted y le permitirá publicar porcentajes de descarga de nuevo a la vista, para que pueda actualizar su ProgressBar o lo que sea.
Eso es todo lo que puedo sugerir, en mi experiencia ciertamente limitada.
fuente
JDialog
está perfectamente bien, siempre que lo use para diálogos.JDialog
o no).Yo diría que una de las primeras cosas es no trabajar directamente en ello. El sistema de diseño en Swing (en mi humilde opinión) es terrible, y tratar de hacer una aplicación sustancial es una pesadilla.
Dos de los muchos gerentes de diseño alternativos que he usado son el diseño MigLayout y MultiSplitPane. MigLayout tiene un propósito más general y crea cualquier diseño en el que pueda pensar de una manera fácil y sensata. MultiSplitPane es más específico; Lo usé para hacer algunos diseños simples para GUI que no tenían mucha complejidad.
EDITAR : esto no reemplaza el swing . Si tiene que usar Swing, aún puede usar estos administradores de diseño, ya que solo administran swing, no lo reemplazan.
Por supuesto, la mejor alternativa es simplemente no usar Swing. Swing es muy criticado por ser horrible para trabajar, no parece nativo y lento. Existen muchas alternativas que han aprendido de swing qué no hacer como Qt, SWT, y creo que incluso GTK. Estas son excelentes soluciones a largo plazo para los dolores de cabeza de Swing
EDITAR : Como dijo @Lord Torgamus, estos no están realmente disponibles si te ves obligado a usar Swing. Si va a utilizar estos, es mejor resolver esto cuando cree su proyecto, no 3/4 de camino o cuando elija aplicaciones heredadas.
También me gustaría señalar que la mayoría de las GUI alternativas usan bibliotecas nativas para parecerse al sistema operativo, luego recurren a Swing o alguna otra GUI de Java puro.
fuente