Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
CI-0202 Principios de informática - 2012b
Profesor Jeisson Hidalgo-Céspedes
Fecha: 16-nov-2012. Entrega grupo 10: 03-dic-2012, grupo 08: 04-dic-2012.

Tarea 05

Implemente una versión gráfica del programa para calcular áreas de pisos del examen 02 (grupo 08), la cual dibuja el área mientras el inspector realiza su recorrido, con el fin de ayudarle visualmente a comprobar que es la correcta. La interfaz del programa consistirá de un "lienzo" (JPanel) donde se dibujarán los recorridos del inspector; un campo de texto (JTextField) donde el inspector ingresará cada lado del recorrido; y un botón (JButton) que sirve para agregar el lado al dibujo. En la siguiente figura se aprecia el inspector agregando el séptimo lado del recorrido: 3 metros hacia el norte, indicado como 3N en el campo de texto. Al presionar el botón Agregar, el lado será agregado al dibujo.

Introduciendo un recorrido en el programa.

Cuando el inspector termina su recorrido, es decir, regresa a la posición de partida, el dibujo se habrá completado. El programa calculará el área y la presentará en el mismo campo de texto como se aprecia en la figura siguiente. El botón Aceptar cambia su texto a "Limpiar". Al presionarlo, el dibujo será borrado, la aplicación crea un nuevo recorrido, y habilita el campo de texto en la espera de ingreso de los nuevos lados.

Impresión del área tras completar el recorrido.

La aplicación se mantiene creando recorridos indefinidamente, hasta que el usuario decide salirse, presionando el botón X a un extremo de la barra de título de la ventana (JFrame). Para su implementación, puede tomar como base el código de ejemplo visto en clase.

Evaluación

  1. [35%] Trazo correcto del recorrido. Borra el dibujo anterior cuando se está creando uno nuevo. Ajusta las coordenadas norte y sur, ya que en el JPanel están invertidas de acuerdo a la convención matemática (i.e.: el norte debe dibujarse hacia arriba). Pinta los tamaños en metros de cada lado del recorrido. Sugerencia, pinte esta longitud en la mitad del segmento, es decir el punto medio: $$\left( {{x_1 + x_2} \over 2}, {{y_1 + y_2} \over 2} \right)$$
  2. [35%] Manejo adecuado de eventos. Si se agrega un lado válido, se presenta en el dibujo, y se limpia el campo de texto para permitir ingresar el siguiente. Si el área se completa, se calcula y se presenta en el campo de texto, el cual no debe ser editable en estas condiciones. Si el lado introducido es no válido, en lugar de agregarlo al dibujo, se le indica al usuario (con un mensaje de diálogo o cambiando momentáneamente el color del campo de texto) para que lo corrija.
  3. [30%] Cálculo correcto del área. Su programa debe ser capaz de darse cuenta cuándo el recorrido se ha completado. Asuma que ningún recorrido tiene más de 256 lados. Debe permitir ingresar lados utilizando un número seguido de la letra del punto cardinal, como 12N para indicar 12 metros norte. La letra para el punto cardinal debe aceptar tanto mayúsculas como minúsculas. Sugerencia, acepte el oeste tanto con la letra O como la letra 'W'.
  4. [5% Opcional] Provea un botón "Reiniciar", que al ser presionado, descarta el recorrido actual e inicia un nuevo. Si no hay ningún recorrido en progreso, el botón tendrá el texto "Salir" y al ser presionado, termina la aplicación invocando a System.exit(0).
  5. [5% Opcional] Permita que en lugar de un único lado, el inspector pueda ingresar varios lados separados por espacios en blanco en el campo de texto. Sugerencia, aproveche el método split() de la clase String. Puede utilizar los siguientes recorridos como prueba:

  6. [10% Opcional] Su programa debe dibujar el recorrido manteniendo una escala. Si la escala usada es 1px:1m, es decir, un píxel de la pantalla equivale a un metro del recorrido, ocurrirá que recorridos pequeños serán casi invisibles en la pantalla, y aquellos extensos rebasarán las dimensiones de la ventana. Modifique su programa para ajustar la escala dinámicamente, de tal forma que el recorrido sea siempre visible en el tamaño actual de la ventana. Por ejemplo:

    Un recorrido extenso escalado para ajustarse al tamaño de la ventana.

Para presentar su solución, comprima los archivos .java que haya creado y súbalos a Mediación virtual en la asignación con nombre Tarea05.