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