applets basico java

40
1 Ambiente grafico de Java Applets, AWT, Swing, …

Upload: jorge-bracca

Post on 14-Oct-2014

79 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: Applets Basico Java

1

Ambiente grafico de

Java

Applets, AWT, Swing, …

Page 2: Applets Basico Java

2

Agenda•El applet básico•Métodos para sobreescribir•Primer applet•Ejecución en el navegador WWW

•Botones•Capturando un evento•Text Field•Text Area•Label•CheckBoxes•Radio Buttons•Drop-Down lists•Lists Boxes

•Controlando la colocación (Layout)•FlowLayout•BorderLayout•GridLayout•CardLayout•GridBagLayout

•Limitaciones applets: Versión•Limitaciones applets: Seguridad•Manejando eventos de ventana•Menus•Dialog Boxes

•El nuevo modelo de eventos Java 1.1

•Swing /JFC•Componentes Swing•Ejemplo Swing

Page 3: Applets Basico Java

3

UI: Creando Applets y Ventanas

Page 4: Applets Basico Java

4

UI: El applet básico

•Han sido diseñados dentro de un “entorno de aplicación”

•El entorno de aplicación define unas clases para ser heredadas. En este caso Applet

•Se sobreescriben los métodos para añadir la funcionalidaddeseada

•Los métodos son llamados automáticamente desde “el entornode aplicación”

•Ideal: No es necesario escribir mucho código para hacer unaaplicación

Page 5: Applets Basico Java

5

UI: Métodos del applet a sobreescribir

•init(): Llamado para inicializar el applet•action(): Manejar los eventos “principales”

•paint(): Para personalizar la forma en que se redibuja el applet. Llamado automáticamente como una parte del update().

•start(): Cuando la página con el applet aparece en la pantalla•stop(): Cuando la página con el applet desaparece de la pantalla•destroy(): Cuando la página se cierra.

Métodos que se tienen que sobreescribir:

Métodos que se se pueden usar para dar más funcionalidad::

Page 6: Applets Basico Java

6

UI: Primer applet

import java.awt.*;

import java.applet.*;

public class Applet1 extends Applet {

public void paint(Graphics g) {

g.drawString("Primer applet", 10, 10);

}

}

El objeto Graphics permite pintar en el applet:

Las coordenadas se dan en pixels

Page 7: Applets Basico Java

7

UI: Applet se ejecuta en Navegador WWW

<applet code=Applet1 width=200 height=200>

</applet>

La página Web (HTML) debe contener el “tag applet”

El applet se ejecuta en:•Un navegador WWW (Netscape)•Appletviewer.exe (JDK) (appletviewer Applet1.html)

Page 8: Applets Basico Java

8

UI: Botones

Constructor: Button(String texto)Se pinta el solito.Se inicializaa en el método init(), no en el paint()

•Para capturar eventos en el estilo antiguo (Java 1.0): Creamos secuencias if en cascada dentro de action()

•action() es llamado cuando se produce un evento. En este casocuando se presiona el boton

Page 9: Applets Basico Java

9

UI: Boton2.java

import java.awt.*;

import java.applet.*;

public class Button2 extends Applet {

Button b1 = new Button("Boton 1"),

b2 = new Button("Boton 2");

public void init() {

add(b1);

add(b2);

}

public boolean action(Event evt, Object arg) {

if(evt.target.equals(b1))

getAppletContext().showStatus("Boton 1");

else if(evt.target.equals(b2))

getAppletContext().showStatus("Boton 2");

else

return super.action(evt, arg);

return true;

}

}

También se puede encontrar el objeto que ha originado el eventopor comparación de Strings pero puede ser peligroso.

Page 10: Applets Basico Java

10

UI: TextField

Una línea de texto que permite al usuario introducir o editar texto

Hereda de TextComponent:•Leer o escribir el texto•Leer o escribir el texto seleccionado•Permitir la edición•Otros...

Page 11: Applets Basico Java

11

UI: TextField1.javapublic class TextField1 extends Applet {

Button b1 = new Button("Leer Texto"),

b2 = new Button("Escribir Texto");

TextField

t = new TextField("Texto inicial", 30);

String s = new String();

public void init() {

add(b1);

add(b2);

add(t);

}

Page 12: Applets Basico Java

12

UI: TextField1.javapublic boolean action (Event evt, Object arg) {

if(evt.target.equals(b1)) {

getAppletContext().showStatus(t.getText());

s = t.getSelectedText();

if(s.length() == 0) s = t.getText();

t.setEditable(true);

}

else if(evt.target.equals(b2)) {

t.setText("Texto insertado por el botón: " + s);

t.setEditable(false);

}

else

return super.action(evt, arg);

return true;

}

}

Page 13: Applets Basico Java

13

UI: TextArea

Hereda de TextComponent:•Leer o escribir el texto : getText(), setText()•Leer o escribir el texto seleccionado•Añadir texto: appendText()•Otros...

Texto de múltiples líneas

New TextArea(“Hola Mundo\nAdios Mundo”, 5, 40);

Page 14: Applets Basico Java

14

UI: TextArea1.javaimport java.awt.*;

import java.applet.*;

public class TextArea1 extends Applet {

Button b1 = new Button("Area Texto 1");

Button b2 = new Button("Area Texto 2");

Button b3 = new Button("Reemplazar Texto");

Button b4 = new Button("Insertar Texto");

TextArea t1 = new TextArea("t1", 1, 30);

TextArea t2 = new TextArea("t2", 4, 30);

public void init() {

add(b1);

add(t1);

add(b2);

add(t2);

add(b3);

add(b4);

}

Page 15: Applets Basico Java

15

UI: TextArea1.javapublic boolean action (Event evt, Object arg) {

if(evt.target.equals(b1))

getAppletContext().showStatus(t1.getText());

else if(evt.target.equals(b2)) {

t2.setText("Insertado por el boton 2");

t2.appendText(": " + t1.getText());

getAppletContext().showStatus(t2.getText());

}

else if(evt.target.equals(b3)) {

String s = " Reemplazamiento ";

t2.replaceText(s, 3, 3 + s.length());

}

else if(evt.target.equals(b4))

t2.insertText(" Insertedo ", 10);

else

return super.action(evt, arg);

return true;

}

}

Page 16: Applets Basico Java

16

UI: Label (etiqueta)Coloca un texto estático en un panel

Constructores:•En blanco•Texto inicial•Alineación (CENTER, LEFT, RIGHT)

(static ints definidos en la claseLabel)

Se puede cambiar el “label” y su alineación consetText() y setAlignment()

Page 17: Applets Basico Java

17

UI: Label1.javaimport java.awt.*;

import java.applet.*;

public class Label1 extends Applet {

TextField t1 = new TextField("t1", 10);

Label labl1 = new Label("TextField t1");

Label labl2 = new Label(" ");

Label labl3 = new Label(" ",

Label.RIGHT);

Button b1 = new Button("Test 1");

Button b2 = new Button("Test 2");

public void init() {

add(labl1); add(t1);

add(b1); add(labl2);

add(b2); add(labl3);

}

Page 18: Applets Basico Java

18

UI: Label1.javapublic boolean action (Event evt, Object arg) {

if(evt.target.equals(b1))

labl2.setText("Text insertado en Label");

else if(evt.target.equals(b2)) {

if(labl3.getText().trim().length() == 0) labl3.setText("labl3");

if(labl3.getAlignment() == Label.LEFT)

labl3.setAlignment(Label.CENTER);

else if(labl3.getAlignment()==Label.CENTER)

labl3.setAlignment(Label.RIGHT);

else if(labl3.getAlignment() == Label.RIGHT)

labl3.setAlignment(Label.LEFT);

}

else

return super.action(evt, arg);

return true;

}

}

Page 19: Applets Basico Java

19

UI: CheckBoxes

public boolean action(Event evt, Object arg) {if (evt.target.equals(cb1) || evt.target.equals(cb2)) {

int cb1state = cb1.getState();int cb2state = cb2.getState();

//...

Checkbox cb1 = new Checkbox(“uno”);Checkbox cb2 = new Checkbox(“dos”);add(cb1);add(cb2); Checkbox cb1 = new Checkbox(“one”);

Capturando los eventos de las cajas de selección:

Page 20: Applets Basico Java

20

UI: Radio Buttons

Pone CheckBoxes en un “grupo” de checkboxes

import java.awt.*;

import java.applet.*;

public class RadioButton1 extends Applet {

TextField t =

new TextField("Radio button 2", 30);

CheckboxGroup g = new CheckboxGroup();

Checkbox

cb1 = new Checkbox("uno", g, false),

cb2 = new Checkbox("dos", g, true),

cb3 = new Checkbox("tres", g, false);

public void init() {

t.setEditable(false);

add(t);

add(cb1); add(cb2); add(cb3);

}

Page 21: Applets Basico Java

21

UI: Radio Buttonspublic boolean action (Event evt, Object arg) {

if(evt.target.equals(cb1))

t.setText("Radio button 1");

else if(evt.target.equals(cb2))

t.setText("Radio button 2");

else if(evt.target.equals(cb3))

t.setText("Radio button 3");

else

return super.action(evt, arg);

return true;

}

}

Page 22: Applets Basico Java

22

UI: Drop-Down Lists

Diferentes de los Combo Boxes de Windows

public class Choice1 extends Applet {

String[] description = { "Jose", "Pepe",

"Manuel", "Juan", "María",

"Timor", "Francoise", "John" };

TextField t = new TextField(30);

Choice c = new Choice();

Button b = new Button("Añadir elementos");

int count = 0;

public void init() {

t.setEditable(false);

for(int i = 0; i < 4; i++)

c.addItem(description[count++]);

add(t);

add(c);

add(b);

}

Page 23: Applets Basico Java

23

UI: Drop-Down Listspublic boolean action (Event evt, Object arg) {

if(evt.target.equals(c))

t.setText("index: " + c.getSelectedIndex()

+ " " + (String)arg);

else if(evt.target.equals(b)) {

if(count < description.length)

c.addItem(description[count++]);

}

else

return super.action(evt, arg);

return true;

}

}

Page 24: Applets Basico Java

24

UI: ListBoxes•A diferencia de Choice, permite selección múltiple•Método action() llamado cuando se hace doble-click•Se pueden capturar clicks (uno sólo) reescribiendo handleEvent()

Page 25: Applets Basico Java

25

UI: List1.javaimport java.awt.*;

import java.applet.*;

public class List1 extends Applet {

String[] flavors = { "Chocolate", "Strawberry",

"Vanilla Fudge Swirl", "Mint Chip",

"Mocha Almond Fudge", "Rum Raisin",

"Praline Cream", "Mud Pie" };

List lst = new List(6, true);

TextArea t = new TextArea(flavors.length, 30);

Button b = new Button("test");

int count = 0;

public void init() {

t.setEditable(false);

for(int i = 0; i < 4; i++)

lst.addItem(flavors[count++]);

add(t);

add(lst);

add(b);

}

Page 26: Applets Basico Java

26

UI: List1.javapublic boolean action (Event evt, Object arg) {

if(evt.target.equals(lst)) {

t.setText("");

String[] items = lst.getSelectedItems();

for(int i = 0; i < items.length; i++)

t.appendText(items[i] + "\n");

}

else if(evt.target.equals(b)) {

if(count < flavors.length)

lst.addItem(flavors[count++], 0);

}

else

return super.action(evt, arg);

return true;

}

}

Page 27: Applets Basico Java

27

UI: Controlando la disposición

•Loscomponentes son colocados en el panel usando“layout manager” (gestor de disposición)

•Los componentes se van colocando por defecto en el orden en que van siendo añadidos con add()

•El tamaño, la forma y dónde se situa el componentedepende del “layout manager” que se use.

•El tamaño del applet o la ventana también afecta a la disposición de los componentes

Page 28: Applets Basico Java

28

UI: FlowLayout•Es el “layout” por defecto•Los botones toman su tamaño“natural”

import java.awt.*;

import java.applet.*;

public class FlowLayout1 extends

Applet {

public void init() {

setLayout(new FlowLayout());

for(int i = 0; i < 20; i++)

add(new Button("Button " + i));

}

}

Page 29: Applets Basico Java

29

UI: BorderLayout•Es el “Layout” por defectopara los diálogos y lasaplicaciones

import java.awt.*;

import java.applet.*;

public class BorderLayout1 extends Applet {

public void init() {

int i = 0;

setLayout(new BorderLayout());

add("North", new Button("Button " + i++));

add("South", new Button("Button " + i++));

add("East", new Button("Button " + i++));

add("West", new Button("Button " + i++));

add("Center", new Button("Button " + i++));

}

}

Page 30: Applets Basico Java

30

UI: GridLayout

•Se organizan los componentes en filas y columnas

import java.awt.*;

import java.applet.*;

public class GridLayout1 extends Applet {

public void init() {

setLayout(new GridLayout(7,3));

for(int i = 0; i < 20; i++)

add(new Button("Button " + i));

}

}

Page 31: Applets Basico Java

31

UI: CardLayout

•Se puede mostrar una u otra “card”•Una “card” son como paneles solapados, y que sólo se muestra uno•Es como el Tabbed Dialog de Windows salvo:

•No hay solapas•Tienes que manejarlo todo

•Swing (Java 1.2) tiene JTabbedPane

Page 32: Applets Basico Java

32

UI: GridBagLayout

•Es el más flexible•Permite alinear horizontalmente y verticalmente loscomponentes sin que sean del mismo tamaño.•Más dificil de programar•Casi todo se puede hacer combinando los anteriores•Reservar GridBagLayout para cuando sea necesario

Page 33: Applets Basico Java

33

Applets

� La sintaxis de las etiquetas <APPLET> y <PARAM> es la que se muestra a continuación y que iremos explicando en párrafos posteriores:

<APPLET CODE= WIDTH= HEIGTH= [CODEBASE=] [ALT=] [NAME=] [ALIGN=] [VSPACE=] [HSPACE=]> <PARAM NAME= VALUE= > </APPLET>

Atributos obligatorios:

� CODE : Nombre de la clase principal

� WIDTH : Anchura inicial

� HEIGHT : Altura inicial

Atributos opcionales:

� CODEBASE : URL base del applet

� ALT : Texto alternativo

� NAME : Nombre de la instancia

� ALIGN : Justificación del applet (LEFT, RIGHT, TOP, TEXTTOP, MIDDLE, ABSMIDDLE, BASELINE, BOTTOM y ABSBOTTOM)

� VSPACE : Espaciado vertical

� HSPACE : Espaciado horizontal

Page 34: Applets Basico Java

34

Applets

import java.awt.Graphics; import java.applet.Applet;

public class HolaTal extends Applet { String nombre;

public void init() { nombre = getParameter( "Nombre" );

}

public void paint( Graphics g ) { g.drawString( "Hola "+nombre+"!",25,25 );

} }

Page 35: Applets Basico Java

35

Applets

<HTML>

<APPLET CODE=HolaTal.class WIDTH=300 HEIGHT=100>

<PARAM NAME="Nombre" VALUE=“Barsa">

</APPLET>

</HTML>

Page 36: Applets Basico Java

36

Ciclo de vida de un applet

Page 37: Applets Basico Java

37

Limitaciones Applets

•Seguridad: Propicio para la red

- No pueden acceder fuera de SU ESPACIO de almacenamiento.- Ejemplo, los applets normalmente se almacenan en un servidor remoto y se ejecutan en el puesto cliente, en este caso no podrán acceder al espacio de almacenamiento (disco) del cliente

•Dialog boxes avisan de seguridad

- Unable to connect to any hosts due to exception: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:3306 connect,resolve)

Page 38: Applets Basico Java

38

Limitaciones Applets•Versiones

Política de seguridad a partir de Java 1.2

grant signedBy quien_firma_el_código, codeBasecódigo_al_que_se_aplica_el_permiso { permission tipo_de_permiso "destino", "acciones"; };

codeBase: código Java al que se aplica el permiso tipo_de_permiso: siguen una estructura jerárquica, donde todo el primer nivel hereda de "Permission": •AllPermission. •BasicPermission: del que heredan NetPermission, RuntimePermission, SecurityPermission, etc.

•FilePermission. •SocketPermission. destino: aquello sobre lo que se hace el permiso. Ejemplos: Un archivo (FilePermission): \\tmp\\doc.txt. Una conexión con un servidor (SocketPermission, con la estructura IP:puerto): 123.0.0.1:3302 o FREDO:3302 acciones: depende si es FilePermission (read, write) o SocketPermission (connect), etc.

Page 39: Applets Basico Java

39

Archivos de política de seguridad

� Archivos de política de seguridad � El archivo maestro para la política de seguridad es

jre\lib\security\java.security.

� PolicyTool� Con el JDK viene una sencilla herramienta para

modificar/crear archivos .policy: PolicyTool. � Con esta herramienta ni tan siquiera es necesario

conocer la sintaxis de grant { ... };

Page 40: Applets Basico Java

40

Limitaciones Applets

� Certificados

�http://www.chuidiang.com/chuwiki/index.php?t

itle=Firmar_Applets

�Applets interesantes

� http://www.dgp.toronto.edu/~mjmcguff/learn/java/