interfaces usuario 3

32
Interfaces de Usuario Componentes Swing (III)

Upload: milaly

Post on 29-Jun-2015

1.944 views

Category:

Entertainment & Humor


0 download

TRANSCRIPT

Page 1: Interfaces Usuario 3

1

Interfaces de Usuario

Componentes Swing

(III)

Page 2: Interfaces Usuario 3

2

Menús (I) Ejemplo:

» “Menús”

Jerarquía:

Page 3: Interfaces Usuario 3

3

Menú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)

Page 4: Interfaces Usuario 3

4

Menú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

Page 5: Interfaces Usuario 3

5

Menú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)

Page 6: Interfaces Usuario 3

6

Ejemplo

Page 7: Interfaces Usuario 3

7

Operació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()

Page 8: Interfaces Usuario 3

8

Eventos de pintar (I)

¿Cuándo se pinta?– Una vez creada una componente,

haciendo: Graphics g = <componente>.getGraphics(); g.<método-de-pintar>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

Page 9: Interfaces Usuario 3

9

Eventos 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“

Page 10: Interfaces Usuario 3

10

Imá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”

Page 11: Interfaces Usuario 3

11

Ejemplo

Page 12: Interfaces Usuario 3

12

Movimientos 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)

Page 13: Interfaces Usuario 3

13

Movimientos 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”

Page 14: Interfaces Usuario 3

14

Movimientos 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”

Page 15: Interfaces Usuario 3

15

Ejemplo

Page 16: Interfaces Usuario 3

16

Applets 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

Page 17: Interfaces Usuario 3

17

Dentro de una página Web

Un applet se incluye en una página Web entre código HTML:

<HTML> <HEAD> <TITLE> Una página con un applet </TITLE> </HEAD> <BODY> A continuación aparece el applet: <APPLET CODE=“MiApplet2.class” WIDTH=350 HEIGHT=200> </APPLET> </BODY></HTML>

Fichero ejemplo.html

Page 18: Interfaces Usuario 3

18

Ejemplo

Ejemplo: “Applets”

Page 19: Interfaces Usuario 3

19

Jerarquía de clases Jerarquía

1. java.lang.Object

2. java.awt.Component

3. java.awt.Container

4. java.awt.Panel

5. java.applet.Applet

6. javax.swing.JApplet

Page 20: Interfaces Usuario 3

20

Caracterí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

<applet>..</applet>

– 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”).

Page 21: Interfaces Usuario 3

21

Mé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

Page 22: Interfaces Usuario 3

22

Limitaciones 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.

Page 23: Interfaces Usuario 3

23

Sintaxis (I) para <applet>....</appl

et>

<APPLET

[CODEBASE = codebaseURL]

CODE = appletFile

[ARCHIVE = JARFiles]

[NAME = appletInstanceName]

WIDTH= pixels HEIGHT= pixels

>

[<PARAM NAME = AttributeName1

VALUE = AttributeValue1>]

[<PARAM NAME = AttributeName2

VALUE = AttributeValue2>]

...

</APPLET>

Page 24: Interfaces Usuario 3

24

Sintaxis (II) para <applet>....</applet

> 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 “<param> …</param>”» Análogo a los parámetros del método

“main” de una aplicación Java normal.

» Método:– public String getParameter(String name)

Page 25: Interfaces Usuario 3

25

Páginas HTML dinámicas (I)

Interfaz web» Páginas HTML» JSP (Java Server Pages)

– Comentario <%-- --%>

– Directiva (de página) <%@page %>

– Scriptlets (mezclables con HTML) <% %> <%= %> (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

Page 26: Interfaces Usuario 3

26

Pá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

Page 27: Interfaces Usuario 3

27

Patrones 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”

Page 28: Interfaces Usuario 3

28

Ejemplo 1Estilo de menús basados en números (respuesta

con un número)

Pregunta: Capital de Francia1. Londres2. Roma3. Paris4. CaracasIntroduce el numero correcto1Respuesta incorrectaPregunta: Capital de Francia1. Londres2. Roma3. Paris4. CaracasIntroduce el numero correcto3Respuesta correcta

Page 29: Interfaces Usuario 3

29

Ejemplo 2Estilo de menús basados en subcadenas (respuesta con dos primeras letras)

Pregunta: Capital de Francia- Londres- Roma- Paris- CaracasIntroduce las dos primeras letras de la solucionPaRespuesta correctaPregunta: Capital de Francia- Londres- Roma- Paris- CaracasIntroduce las dos primeras letras de la solucionCaRespuesta incorrecta

Page 30: Interfaces Usuario 3

30

Método main

int main(int argc, char* argv[]){

<Creación de una fábrica de menús de números> // Ejemplo 1// Ejemplo 2: Utilización del patrón: // <Creación de una fábrica de menús de subcadenas><Creación por la fábrica de un menú ><Crear la pregunta "Capital de Francia" para el menú><Crear la opción "Londres" para el menú><Crear la opción "Roma" para el menú><Crear la opción "París" para el menú, como la correcta><Crear la opción "Caracas" para el menú><repetir dos veces>

<Ejecutar la acción “preguntar” en el menú><Ejecutar la acción “responder” en el

menú><fin de repetición>

}

Page 31: Interfaces Usuario 3

31

Diagrama de clases

MenuDeNumeros

+preguntar(): void

Menu#elementos: vector<string>#solucion: string#pregunta: string#respuesta+crearPregunta(s:string): void+crearNuevaOpcion(string,correcta:int): void+responder(): void+preguntar()

FabricaDeMenus

+crearMenu(): Menu

FabricaDeMenusDeSubcadenas

+crearMenu(): Menu

MenuDeSubcadenas

+preguntar(): void

FabricaDeMenusDeNumeros

+crearMenu(): Menu

Page 32: Interfaces Usuario 3

32

Diagrama de secuencia

unaFabricaDeMenusDe Numeros

unMenuDeNumeros

unUsuario

crearMenunew

crearPregunta

* crearNuevaOpcion

preguntar

responder

new