Dificultad 1:
Disposición de elementos gráficos: dada la gran cantidad de objetos que posee esta aplicación, la complejidad surge al tratar de ordenar todos ellos de cierta forma que adquiera un formato amigable para el usuario final.
Solución:
Este punto se soluciona utilizando la función "SetBounds (posición izquierda, posición superior, ancho, alto)" que permite disponer de los elementos en la posición que el desarrollador desee en el JFrame (notar que todos los parámetros de setBounds están en píxeles).
Dificultad 2:
Paso de parámetros a funciones: se puede denotar en la aplicación la abundancia de elementos y las múltiples dependencias entre ellos para lograr la funcionalidad final, es por ello que se tornó complejo definir qué parámetros serían necesarios en cada método.
Solución:
Se realizó un diagrama de clases primitivo en papel respecto de las funcionalidades que se querían lograr para tener un orden mental respecto de los objetivos esperados, plasmando dichas ideas en código y permitiendo el resultado final logrado en este proyecto.
Dificultad 3:
Toma equivocada de decisiones: al interactuar varios objetos en ventana, es normal que el usuario se confunda o intente realizar acciones que no contribuyan a la funcionalidad final siguiendo caminos equivocados en el uso de la aplicación.
Solución:
Este inconveniente se soluciona mediante múltiples mensajes "Warning" implementados a lo largo del código, además del bloqueo de las secciones editables al ingresar ciertos datos, con tal de llevar al usuario por una única vía válida que le permita una menor confusión y lograr obtener sus indicadores académicos.
Dificultad 4:
Jerarquía de Swing y uso de sus objetos: esta clase posee una jerarquía particular, tal que JFrame se encuentra en lo más alto de esta.
Solución:
Se estudió la estructura del RootPane contenido en JFrame para plantear la solución y la disposición de elementos. Dada la dependencia y estructura existente, se decide disponer del JFrame y de su panel de contenidos para incluir todos los objetos en este, con tal de que se tenga la libertad de disponer de ellos en la posición que uno determine, evitando el uso de JPanels y métodos para la colocación de elementos dada cierta estructura (por ejemplo, método FlowLayout de JPanel).
Dificultad 5:
Formato para datos en archivos y aplicación: al escribir datos en un archivo de texto, se pensó en utilizar un separador para permitir cierto orden (se usó ''\t''), pero surge el problema de orden de los datos en ventana, esto dado que el campo "Asignatura" tiene un rango variable dado por el usuario.
Solución:
Frente a esta situación, se define un máximo de carácteres a ingresar en dicho campo y se consideran dos casos particuales para ordenar dichos datos en base al largo del escrito realizado por el usuario, manteniendo así un formato ordenado y legible en ventana que resulte amigable a la vista.