Download Práctica 4: Interfaces Gráficas de Usuario en Java
Document related concepts
no text concepts found
Transcript
Práctica 4: Interfaces Gráficas de Usuario en Java Asignatura:Ingenierı́a del Software-II Curso:2008/2009 Francisco José Berlanga Dpto. de Informática e Ingenierı́a de Sistemas, Universidad de Zaragoza [email protected] 2 de diciembre de 2008 1. Objetivos Los objetivos de esta práctica son: Diseñar interfaces gráficas de usuario en Java utilizando componentes Swing, profundizando en el uso de las clases Graphics y Graphics2D y de los métodos paint(Graphics) y repaint() para poder dibujar en los componentes. Profundizar en la captura de eventos para manejar el ratón y el teclado mediante las clases MouseListener, MouseMotionListener y KeyListener. Manejar el API y la documentación de Java para encontrar la información necesaria. Para facilitar vuestra tarea, podéis encontrar en la página de la asignatura el esqueleto de la aplicación que deberéis implementar. Este esqueleto consta de cinco ficheros .java, que corresponden a cada una de las clases presentes en la práctica: Aplicacion, Ventana, Red, Actor y Relacion. Las dos primeras clases (Aplicacion y Ventana) están completamente implementadas. Las otras tres clases Red, Actor y Relacion tienen declarados algunos atributos e interfaces de métodos. Vuestra tarea será completar los métodos (y/o añadir nuevos atributos y métodos) de estas tres últimas clases. 2. Contexto del Problema Se pretende desarrollar una versión de test para una futura aplicación que permitirá modelar una red social. Al ser una versión muy temprana de la herramienta, las funcionalidades requeridas son muy limitadas: La aplicación consta de un área donde dibujar la red y de un único botón para añadir actores (individuos) a la red. Las posibles acciones permitidas en la herramienta serán: insertar, mover y borrar actores y crear relaciones entre actores. En la parte inferior de la ventana existen dos contadores que indican el número de actores y relaciones que existen actualmente en la red representada. 1 Práctica 4 (INS-II) 2 Sobre los actores: • Los actores se representarán mediante rectángulos con fondo blanco y bordes negros. Dichos rectángulos mostrarán el nombre del actor. • Como no se va a permitir la edición de los actores, cada vez que se inserte un actor en la red esta mostrará como nombre la cadena Actor n, donde n es el número de creación. Por lo tanto el primer actor creado se llamará Actor 0, el siguiente Actor 1, ..., y ası́ sucesivamente. • Internamente, los actores se almacenarán en un vector dinámico de clase Vector, presente en el paquete java.util, y que se encuentra dentro de la clase Red. El actor en la posición 0 del vector estará al fondo de la red, mientras que el que ocupe la última posición estará sobre todos los demás. Cuando el usuario mueva el ratón sobre un actor que esté semi-oculto, este deberá traerse al frente. • Para mover un actor de un sitio a otro, el usuario deberá posicionar el cursor sobre el actor, presionar el botón izquierdo del ratón y, sin soltarlo, arrastrar el actor hasta la nueva posición. En ese momento ya se puede soltar el botón del ratón y el actor se fijará en la nueva posición. • Para borrar un actor de la red el usuario debe hacer click sobre él con el botón derecho del ratón. Si el actor tuviese alguna relación, estas también se borrarán. • Para seleccionar un actor el usuario deberá colocar el ratón sobre el actor a seleccionar y presionar la tecla S. En ese momento el actor pasará a cambiar su fondo de blanco a verde. Para deseleccionar al actor, se volverá a presionar la tecla S con el cursor sobre el actor. Sólo puede haber un actor seleccionado en la red. Por último, si se presiona la tecla S cuando el cursor no está sobre ningún actor, el último actor seleccionado se deseleccionará. Sobre las relaciones: • Una relación se representará mediante una lı́nea negra que conecta dos actores (no necesariamente una lı́nea recta). • Se podrán crear relaciones entre dos actores distintos (no tiene sentido crear una relación de un actor consigo mismo). • Para crear una relación el usuario seleccionará uno de los actores (de la forma previamente descrita). Una vez seleccionado uno de los actores, presionará el botón izquierdo del ratón y, sin soltarlo, moverá el cursor hacia el otro actor (redibujándose la linea bajo el cursor). Si mientras arrastramos la relación pasamos sobre un actor, dicho actor se iluminará en rojo para indicar que podemos crear la relación. Si al soltar el botón del ratón estaba sobre otro actor, se creará una relación entre ambos. En el caso de que se creara la relación, ningún actor deberá quedar seleccionado. • Internamente, las relaciones se almacenarán en un vector dinámico (java.util.Vector) dentro de la clase Red. NOTA: Según lo descrito, si un actor está seleccionado la única acción permitida es conectarlo a otro actor, y si está deseleccionado sólo puede ser arrastrado o borrado. Francisco José Berlanga, CPS-Unizar Práctica 4 (INS-II) 3. 3 Algunos Consejos El área de dibujo de la red (la clase Red) está representado por un objeto javax. swing.JPanel, que permite tanto el dibujo personalizado como la recogida de eventos generados por el usuario. Además el método paint(Graphics) de dicha clase da acceso a un objeto java.awt.Graphics que permite el dibujo de rectas, rectángulos, texto, etc. sobre el componente. Esta clase te proporcionará las herramientas de dibujo necesarias, pero si quieres realizar tareas más sofisticadas puedes utilizar la clase java.awt.Graphics2D haciendo un simple cast: Graphics objetoGraphics Graphics2D objetoGraphics2D = (Graphics2D) objetoGraphics Mientras que el método paint es el encargado de dibujar sobre el componente, no debe llamarse directamente; usaremos el método repaint() cada vez que necesitemos redibujar la red. El ejemplo que aparece en [2] te será de utilidad ya que permite dibujar lı́neas en un objeto Panel, que funciona de manera similar al JPanel. Para saber cómo capturar e interpretar los eventos generados por el ratón deberás estudiar la clases de java.awt.event relacionadas con el ratón: MouseListener, MouseMotionListener y MouseEvent. El ejemplo que aparece en [3] te será de ayuda. Para saber como capturar e interpretar los eventos generados por la pulsación del teclado deberás estudiar las clases KeyListener y KeyEvent del paquete java.awt.event. 4. Entrega de la Práctica La práctica se realizará en parejas o de forma individual. Se debe entregar un fichero p4miNIP.zip (donde miNIP es el NIP de uno cualquiera de los dos miembros de la pareja de prácticas) que incluirá: Un fichero Autores.txt que contendrá, exclusivamente, los nombres y apellidos de los autores de la práctica y sus respectivos NIPs. Un shell script compila, que compila todos los ficheros .java (debe compilar para Java 1.5). Un shell script ejecuta, que pone en ejecución la aplicación. Un directorio SRC, que contiene los ficheros fuente Java utilizados en la implementación de la práctica. Un directorio CLASSES, que contiene los ficheros de las clases Java. En este directorio es donde depositará las clases el shell script compila. Es imprescindible seguir las convenciones de nombrado (incluido el uso adecuado de mayúsculas y minúsculas) y la estructura de ficheros y directorios (SRC, CLASSES, etc.) descrita. Al descomprimir el fichero .zip se deben extraer los ficheros y directorios Francisco José Berlanga, CPS-Unizar Práctica 4 (INS-II) 4 indicados en el directorio actual. Para entregar el fichero .zip, se utilizará el comando someter en la máquina hendrix: someter is 08 p4miNIP.zip La fecha tope para la entrega de la práctica es el 30 de Enero de 2009. También es posible entregar la práctica en Septiembre de 2009, pero en ese caso puntuará la mitad. Para que la práctica sea corregida, es necesario haber asistido a la correspondiente sesión de prácticas, tanto si se entrega ahora como si se entrega en Septiembre. 5. Criterios de Evaluación La práctica tiene una valoración de 0.5 puntos sobre el total de 10 de la asignatura, de acuerdo con los siguientes criterios: 1. La práctica debe entregarse en los términos indicados anteriormente en la sección 4, funcionar correctamente conforme a lo descrito en la sección 2, no haber sido copiada, y haber asistido a las sesiones de prácticas de forma activa. Esto supondrá una valoración mı́nima de 5 sobre 10. 2. Se valorará la estructura de clases/paquetes, ası́ como los comentarios y cabeceras insertados en el código. Hasta 2 puntos (sobre 10). 3. Los 3 puntos restantes (sobre 10) dependerán de una valoración global del trabajo realizado. 4. Se penalizará si se detectan errores (si son graves, no se alcanzan los mı́nimos exigidos en la sección 2) en la implementación (por ejemplo, que determinada funcionalidad no funciona correctamente en ciertas circunstancias). Referencias [1] Documentación Java 1.5: http://iis1.cps.unizar.es/jdk1.5.0/docs/ [2] DrawTest: http://java.sun.com/applets/jdk/1.4/demo/applets/ DrawTest/example1.html [3] GraphLayout: http://java.sun.com/applets/jdk/1.4/demo/applets/ GraphLayout/example1.html Francisco José Berlanga, CPS-Unizar