Title: Interfaces de Usuario Componentes Swing III
1Interfaces de UsuarioComponentes Swing (III)
2Menús (I)
3Menús (II)
- Menús normales y desplegables
- JMenuBar (menú normal)
- Constructor
- public JMenuBar()
- Métodos
- public JMenu add(JMenu c)
- Asignación de menús (en objetos de tipo JFrame,
JDialog y JApplet) no se hace en el
contentPane - public void setJMenuBar(JMenuBar menubar)
- JPopupMenu (menú desplegable)
- Constructor
- public JPopupMenu(String label)
- Métodos
- public JMenuItem add (JMenuItem menuItem)
- public void addSeparator()
- Mostrar el menú
- public void show(Component invoker, int x, int y)
4Menús (III)
- JMenu
- Constructor
- public JMenu(String s)
- Métodos
- public JMenuItem add(JMenuItem menuItem)
- public void addSeparator()
- JMenuItem
- Constructor
- public JMenuItem(String text)
- Eventos ActionEvent
- JCheckBoxMenuItem
- Constructor
- public JCheckBoxMenuItem(String text, boolean
selected) - Eventos ActionEvent, ItemEvent
5Menús (IV)
- JRadioButtonMenuItem
- No permite selección múltiple
- Constructor
- public JRadioButtonMenuItem(String text, boolean
selected) - Eventos ActionEvent, ItemEvent
- Para permitir uno solo activable, se crea un
grupo - ButtonGroup
- public void add(AbstractButton b)
6Ejemplo
7Operación de pintar
- Cómo se pinta?
- Clase java.awt.Graphics
- Contexto gráfico o pincel virtual
- Métodos
- public abstract void drawString(String str, int
x, int y) - public abstract void fillOval(int x, int y, int
width, int height) - public void drawRect(int x, int y, int width, int
height) - public abstract void setFont(Font font)
- public abstract void setColor(Color c)
- Una vez creada una componente, se puede acceder a
su contexto gráfico - Clase JComponent
- public Graphics getGraphics()
8Eventos de pintar (I)
- Cuándo se pinta?
- Una vez creada una componente, haciendo
- Graphics g ltcomponentegt.getGraphics()
- g.ltmétodo-de-pintargt
- Inconveniente habría que ejecutarlo en muchas
ocasiones - En respuesta a la generación de un evento de
pintar que llega a la cola de eventos. - Respuesta al evento de pintar
- Se ejecuta el método paint de la componente
- JComponent
- public void paint (Graphics g)
- Es público
- Llama a paintComponent, a paintBorder y a
paintChildren - protected void paintComponent(Graphics g)
- Pinta el background
9Eventos de pintar (II)
- Modos de generación de un evento de pintar
- Automático
- Mostrar la ventana por primera vez desiconizar
una ventana activar la ventana que se encontraba
total o parcialmente oculta, etc. - Llamada al método (java.awt.Component)
- public void repaint()
- Componentes no predefinidas
- Subclase de JPanel, redefiniendo paintComponent
- Llamando primero a super.paintComponent
- Ejemplo
- Pintar-Imagen-Animación
10Imágenes y animaciones
- Creación de imágenes
- Clase Graphics
- public abstract boolean drawImage(Image img, int
x, int y, int width, int height, ImageObserver
observer) - JComponent desciende de ImageObserver (interface)
- Clase java.awt.Toolkit
- public static Toolkit getDefaultToolkit()
- public abstract Image getImage(String filename)
- public abstract Image getImage(URL url)
- Animaciones
- Creación de un thread que duerme y repinta
- Uso de timers (threads predefinidos), mediante
la clase Timer - Ejemplo
- Animación-Timers
11Ejemplo
12Movimientos de ratón (I)
- Clase java.awt.event.MouseEvent
- Constructor
- public MouseEvent(Component source, int id, long
when, int modifiers, int x, int y, int
clickCount, boolean popupTrigger, int button) - Métodos
- public int getButton() (botón del ratón)
- public int getClickCount()
- public int getX()
- public int getY()
- public Object getSource()
- Movimientos de ratón
- java.awt.event.MouseMotionListener
- public void mouseDragged(MouseEvent e)
- public void mouseMoved(MouseEvent e)
13Movimientos de ratón (II)
- Dos tipos de interacciones
- 1) Mover ratón sin tocar sus botones
- 2) Arrastrar ratón
- 1) Mover ratón sin tocar sus botones
- Eventos generados
- Un MouseEvent por cada desplazamiento
infinitesimal - El getSource, getX y getY son relativos a
la componente bajo el ratón - Recogido por un MouseMotionListener y procesado
por mouseMoved
14Movimientos de ratón (III)
- 2) Arrastrar ratón
- Eventos generados
- Un MouseEvent inicial
- Recogido por un MouseListener y procesado por
mousePressed - Un MouseEvent por cada desplazamiento
infinitesimal - El getSource, getX y getY son relativos a
la componente desde donde se arrastra - Recogido por un MouseMotionListener y procesado
por mouseDragged - Un MouseEvent final
- Recogido por un MouseListener y procesado por
mouseRealeased - Ejemplo
- Movimientos-Ratón
15Ejemplo
16Applets
- Interfaces de usuario que se muestran en
navegadores Web. - Análogos a JFrame, aunque
- Su tamaño es fijo en la página web
- No tienen los permisos que una interfaz de
usuario normal creada dentro del método main - Por seguridad
- No tienen método main. Se define una subclase
de JApplet y el navegador ejecuta - 1) El constructor JApplet()
- 2) Métodos init, start, stop, destroy
cuando corresponda
17Dentro de una página Web
- Un applet se incluye en una página Web entre
código HTML -
Fichero ejemplo.html
ltHTMLgt ltHEADgt ltTITLEgt
Una página con un applet lt/TITLEgt
lt/HEADgt ltBODYgt A continuación aparece
el applet ltAPPLET
CODEMiApplet2.class WIDTH350
HEIGHT200gt lt/APPLETgt lt/BODYgt lt/HTMLgt
18Ejemplo
Ejemplo Applets
19Jerarquía de clases
- Jerarquía
- java.lang.Object
- java.awt.Component
- java.awt.Container
- java.awt.Panel
- java.applet.Applet
- javax.swing.JApplet
20Características generales
- No necesita método main se extiende la clase
JApplet - Los simuladores de applets (appletviewers)
emulan a applets. - Desde línea de comandos
- appletviewer ejemplo.html
- ignora el código html fuera de ltappletgt..lt/appletgt
- Dimensiones modificables interactivamente
- Los navegadores Internet Explorer y Netscape
soportan JDK 1.1. - Al instalar una versión superior (por ejemplo
J2SK 1.4), se instala un plug-in para que el
navegador admita applets de esa versión superior.
- Applets más convenientes en intranets (mayor
velocidad de download).
21Métodos característicos de un applet
- Dentro de la clase JApplet
- init()
- Inicialización de una página en el navegador (se
ejecuta una sola vez) - start()
- Inicializacion o revisita de una página
- stop()
- Al destruir la página o abandonarla
- destroy()
- Al destruir la página
- Algunos navegadores (como Internet Explorer) no
cumplen este estándar - Destruyen el applet al abandonar una página
(haciendo también destroy) y reinicializan
completamente el applet al revisitarla. - Hilos generados (no estándar)
- Algunos navegadores generan un hilo de eventos
por cada applet de una página y otros lo hacen de
otra manera
22Limitaciones de applets
- Dependientes del navegador. Algunas de ellas
- No pueden leer o escribir en ficheros.
- Conexiones imposibles a otra máquina distinta de
la que proviene. - No puede arrancar ningún programa en el ordenador
donde se está ejecutando, ni tampoco leer sus
propiedades. - En el appletviewer aparecen menos restricciones
(se pueden leer propiedades locales, ejecutar
otro programa, ...) - En Java, sin embargo, hay otros servicios que
permiten ignorar estas limitaciones - A los signed applets de confianza se les puede
dar los mismos privilegios que a una aplicación.
23Sintaxis (I) para ltappletgt....lt/appletgt
- ltAPPLET
- CODEBASE codebaseURL
- CODE appletFile
- ARCHIVE JARFiles
- NAME appletInstanceName
- WIDTH pixels HEIGHT pixels
-
- gt
- ltPARAM NAME AttributeName1
- VALUE AttributeValue1gt
- ltPARAM NAME AttributeName2
- VALUE AttributeValue2gt
- ...
- lt/APPLETgt
24Sintaxis (II) para ltappletgt....lt/appletgt
- El contenido del classpath son direcciones
internet - codebase
- Análogo a los directorios locales que se añaden
al classpath en Netbeans - archive
- Análogo a los ficheros .zip o .jar que se
añaden al classpath en Netbeans - Un applet puede recibir parámetros dentro de
ltparamgt lt/paramgt - Análogo a los parámetros del método main de una
aplicación Java normal. - Método
- public String getParameter(String name)
25Páginas HTML dinámicas (I)
- Interfaz web
- Páginas HTML
- JSP (Java Server Pages)
- Comentario
- lt-- --gt
- Directiva (de página)
- lt_at_page gt
- Scriptlets (mezclables con HTML)
- lt gt
- lt gt (conversión a String)
- Uso de un bean de sesión
- Bean (atributos con métodos get/set)
- Javascript
- Alternativa a JSP
- JSP envía al servidor y espera respuesta
- Javascript ejecuta en cliente
26Páginas HTML dinámicas (II)
- Ejemplo
- Interfaz-Web
- Sesión ? Bean
- Uso del patrón MVC (Model View Controller)
- Programación Web Visual (Rapid Web Development)
- Sun Java Studio Creator
27Patrones de diseño
- Patrones de diseño (UML). Ejemplos
- MVC
- Patrón de Fábrica Abstracta
- Ejemplo
- Patrón de Fábrica Abstracta
- Ejemplo
- Realización de preguntas basadas en menús
- Ejemplo 1 (estilo números)
- Ejemplo 2 (estilo subcadenas)
- Implementación en Java
- Ejemplo
- Patrón-Diseño
28Ejemplo 1
- Estilo de menús basados en números (respuesta con
un número) - Pregunta Capital de Francia
- 1. Londres
- 2. Roma
- 3. Paris
- 4. Caracas
- Introduce el numero correcto
- 1
- Respuesta incorrecta
- Pregunta Capital de Francia
- 1. Londres
- 2. Roma
- 3. Paris
- 4. Caracas
- Introduce el numero correcto
- 3
- Respuesta correcta
29Ejemplo 2
- Estilo de menús basados en subcadenas (respuesta
- con dos primeras letras)
- Pregunta Capital de Francia
- - Londres
- - Roma
- - Paris
- - Caracas
- Introduce las dos primeras letras de la solucion
- Pa
- Respuesta correcta
- Pregunta Capital de Francia
- - Londres
- - Roma
- - Paris
- - Caracas
- Introduce las dos primeras letras de la solucion
- Ca
- Respuesta incorrecta
30Método main
- int main(int argc, char argv)
-
- ltCreación de una fábrica de menús de númerosgt
// Ejemplo 1 - // Ejemplo 2 Utilización del patrón
- // ltCreación de una fábrica de menús de
subcadenasgt - ltCreación por la fábrica de un menú gt
- ltCrear la pregunta "Capital de Francia" para el
menúgt - ltCrear la opción "Londres" para el menúgt
- ltCrear la opción "Roma" para el menúgt
- ltCrear la opción "París" para el menú, como la
correctagt - ltCrear la opción "Caracas" para el menúgt
- ltrepetir dos vecesgt
- ltEjecutar la acción preguntar en el menúgt
- ltEjecutar la acción responder en el menúgt
- ltfin de repeticióngt
-
31Diagrama de clases
32Diagrama de secuencia