A continuación se muestra el Diagrama de Clases para la solución encontrada:
Se observan 7 clases publicas más 4 clases internas, 3 de
ellas asociadas al panel de dibujo y una al panel principal. La clase Editor extiende de Applet y a ella se agrega un objeto de tipo MainPanel, que contendrá los paneles que se aprecian en la GUI. MainPanel fue pensada para poder
organizar sus componentes, los demás paneles, mediante métodos asociados a Layouts de Java. MainPanel posee una clase interna anónima para atender el evento de
clic en el botón Web. Este también está contenido en un panel, pero que se
obtuvo mediante el constructor de la clase JPanel,
no a través de herencia como en los otros tres paneles. La clase Editor
contiene además el método init() para el Applet. En dicho método se han
ubicado las sentencias apropiadas para obtener la url, el valor de Flotante
y el marco en que se desplegará la página web. Para ello se utiliza el método
getParameter() dándole como argumento el nombre del parámetro que se
desea traer.
En MainPanel se agregan los paneles de Acción, Figuras y Dibujo (Drawing). Los dos primeros tienen instancias de la clase Botones, que fue diseñada para poder personalizar los botones con iconos y formato. La clase ButtonHandler se encarga de manejar los eventos de botón, que pueden provenir de las distintas clases asociadas. El DrawingPanel no contiene botones, pero está “escuchando” el estado de ellos para saber que método invocar cuando se desee ejecutar alguna Acción o dibujar alguna Figura.
Finalmente, dentro de la clase DrawingPanel se han implementado los métodos para cumplir con la interfaz de MouseAdapter, asociada a movimientos y eventos relacionados con el mouse. La clase interna ComponentHandler aparece para identificar un resize de la ventana y aislar la invocación del método paintComponent en relación con los llamados para dibujar o realizar AffineTransforms.
Las AffineTransforms fueron las herramientas primordiales para implementar las labores de modificación de figuras. Dicha clase cuenta con método diseñados para rotar, trasladar y escalar el contenido de un Componente Java. Sin embargo, al utilizarlas se debe tener en mente los conceptos de user space y device space, esto es, las coordenadas de usuario y de dispositivo. Java se basa en las coordenadas de dispositivo, para ubicar sus ventanas y sus paneles y posicionarse adecuadamente en el despliegue que se este usando. El espacio de usuario es donde se hacen las transformaciones, y en este caso está asociado al panel de Dibujo, que sobremonta el método paintComponent para efectuar el repintado de las figuras.
Javadoc
La documentación en Javadoc se encuentra aqui.
Chequeo de Estilo
El código .java pasa correctamente el chequeo de estilo. Para verificarlo use make style en el directorio donde se ubica el Makefile. Esta llamada considera que el archivo checkstyle-all-3.4 se encuentra en /usr/local/checkstyle/checkstyle-all-3.4.jar y que el archivo de estilo sjsu.xml, incluido con esta Tarea, se ubique en el directorio en que se encuentra el código java.