Vous êtes sur la page 1sur 40

Ambiente grafico de

Java
Applets, AWT, Swing, …

1
Agenda
•El applet básico •Controlando la colocación (Layout)
•Métodos para sobreescribir •FlowLayout
•Primer applet •BorderLayout
•Ejecución en el navegador WWW •GridLayout
•CardLayout
•Botones •GridBagLayout
•Capturando un evento
•Text Field •Limitaciones applets: Versión
•Text Area •Limitaciones applets: Seguridad
•Label •Manejando eventos de ventana
•CheckBoxes •Menus
•Radio Buttons •Dialog Boxes
•Drop-Down lists
•Lists Boxes •El nuevo modelo de eventos Java 1.1

•Swing /JFC
•Componentes Swing
•Ejemplo Swing

2
UI: Creando Applets y Ventanas

3
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 funcionalidad


deseada

•Los métodos son llamados automáticamente desde “el entorno


de aplicación”

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


aplicación

4
UI: Métodos del applet a
sobreescribir
Métodos que se tienen que sobreescribir:
•init(): Llamado para inicializar el applet
•action(): Manejar los eventos “principales”

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


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

5
UI: Primer applet
El objeto Graphics permite pintar en el applet:
import java.awt.*;
import java.applet.*;

public class Applet1 extends Applet {


public void paint(Graphics g) {
g.drawString("Primer applet", 10, 10);
}
}

Las coordenadas se dan en pixels

6
UI: Applet se ejecuta en
Navegador WWW
La página Web (HTML) debe contener el “tag applet”

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

El applet se ejecuta en:


•Un navegador WWW (Netscape)
•Appletviewer.exe (JDK) (appletviewer Applet1.html)

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


cuando se presiona el boton

8
UI: Boton2.java
import java.awt.*; public boolean action(Event evt, Object arg) {
import java.applet.*; if(evt.target.equals(b1))
getAppletContext().showStatus("Boton 1");
public class Button2 extends Applet { else if(evt.target.equals(b2))
Button b1 = new Button("Boton 1"), getAppletContext().showStatus("Boton 2");
b2 = new Button("Boton 2"); else
public void init() { return super.action(evt, arg);
add(b1); return true;
add(b2); }
} }

También se puede encontrar el objeto que ha originado el evento


por comparación de Strings pero puede ser peligroso.

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

10
UI: TextField1.java
public 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);
}

11
UI: TextField1.java
public 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;
}
}

12
UI: TextArea
Texto de múltiples líneas

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

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

13
UI: TextArea1.java
import java.awt.*; public void init() {
import java.applet.*; add(b1);
add(t1);
public class TextArea1 extends Applet { add(b2);
Button b1 = new Button("Area Texto 1"); add(t2);
Button b2 = new Button("Area Texto 2"); add(b3);
Button b3 = new Button("Reemplazar Texto"); add(b4);
Button b4 = new Button("Insertar Texto"); }
TextArea t1 = new TextArea("t1", 1, 30);
TextArea t2 = new TextArea("t2", 4, 30);

14
UI: TextArea1.java
public 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 "; else if(evt.target.equals(b4))
t2.replaceText(s, 3, 3 + s.length()); t2.insertText(" Insertedo ", 10);
} else
return super.action(evt, arg);
return true;
}
}

15
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 clase
Label)

Se puede cambiar el “label” y su alineación con


setText() y setAlignment()

16
UI: Label1.java
import 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);
}

17
UI: Label1.java
public 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;
}
}

18
UI: CheckBoxes
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:

public boolean action(Event evt, Object arg) {


if (evt.target.equals(cb1) || evt.target.equals(cb2)) {
int cb1state = cb1.getState();
int cb2state = cb2.getState();
//...

19
UI: Radio Buttons
Pone CheckBoxes en un “grupo” de checkboxes

import java.awt.*; public void init() {


import java.applet.*; t.setEditable(false);
add(t);
public class RadioButton1 extends Applet { add(cb1); add(cb2); add(cb3);
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);

20
UI: Radio Buttons
public 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;
}
}

21
UI: Drop-Down Lists
Diferentes de los Combo Boxes de Windows

public class Choice1 extends Applet { public void init() {


String[] description = { "Jose", "Pepe", t.setEditable(false);
"Manuel", "Juan", "María", for(int i = 0; i < 4; i++)
"Timor", "Francoise", "John" }; c.addItem(description[count++]);
TextField t = new TextField(30); add(t);
Choice c = new Choice(); add(c);
Button b = new Button("Añadir elementos"); add(b);
int count = 0; }

22
UI: Drop-Down Lists
public 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;
}
}

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

24
UI: List1.java
import java.awt.*; public void init() {
import java.applet.*; t.setEditable(false);
for(int i = 0; i < 4; i++)
public class List1 extends Applet { lst.addItem(flavors[count++]);
String[] flavors = { "Chocolate", "Strawberry", add(t);
"Vanilla Fudge Swirl", "Mint Chip", add(lst);
"Mocha Almond Fudge", "Rum Raisin", add(b);
"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;

25
UI: List1.java
public 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;
}
}

26
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 componente


depende del “layout manager” que se use.

•El tamaño del applet o la ventana también afecta a la


disposición de los componentes

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

28
UI: BorderLayout
•Es el “Layout” por defecto
para los diálogos y las
aplicaciones
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++));
}
}

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

30
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

31
UI: GridBagLayout

•Es el más flexible


•Permite alinear horizontalmente y verticalmente los
componentes 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

32
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

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

34
Applets
<HTML>
<APPLET CODE=HolaTal.class WIDTH=300 HEIGHT=100>
<PARAM NAME="Nombre" VALUE=“Barsa">
</APPLET>
</HTML>

35
Ciclo de vida de un applet

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

37
•Versiones
Política de seguridad a partir de Java 1.2
Limitaciones Applets
grant signedBy quien_firma_el_código, codeBase
có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.

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

39
Limitaciones Applets
 Certificados

 http://www.chuidiang.com/chuwiki/index.php?t
itle=Firmar_Applets

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

40

Vous aimerez peut-être aussi