applets basico java

Post on 14-Oct-2014

80 Views

Category:

Documents

8 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Ambiente grafico de

Java

Applets, AWT, Swing, …

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

3

UI: Creando Applets y Ventanas

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

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::

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

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)

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

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.

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

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

}

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;

}

}

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

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

}

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;

}

}

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

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

}

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;

}

}

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:

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

}

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;

}

}

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

}

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;

}

}

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

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

}

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;

}

}

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

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

}

}

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++));

}

}

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

}

}

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

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

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

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

} }

35

Applets

<HTML>

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

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

</APPLET>

</HTML>

36

Ciclo de vida de un applet

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)

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.

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 { ... };

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/

top related