Anda di halaman 1dari 10

ndice

ndice

Organizacin de los elementos grficos

Organizacin de los elementos grficos

Administradores de distribucin
FlowLayout
BorderLayout
GridLayout
GridBagLayout
Administrador de distribucin nulo
Administracin por anidamiento de contenedores

Administradores de distribucin
FlowLayout
BorderLayout
GridLayout
GridBagLayout
Administrador de distribucin nulo
Administracin por anidamiento de contenedores

Organizacin de los elementos


grficos

Organizacin de los elementos


grficos

Administradores de distribucin (LayoutManager)

El cmo un administrador de distribucin decide el


tamao y posicin de los componentes depende de:

Objetos que se asocian a los contenedores y se encargan de


decidir el tamao y posicin de los componentes que se
pintan en ellos
Por defecto?
Existen varias clases que implementan el interfaz
LayoutManager o su subinterfaz LayoutManager2
java.awt.FlowLayout
z java.awt.GridLayout
z java.awt.CardLayout
z java.awt.BorderLayout
z

Naturaleza del administrador


Configuracin del administrador
Configuracin por componente
z

Informacin en el propio componente


public void setLocation(int x, int y) (Component)
void setMaximumSize(Dimension maximunSize) (JComponent)
void setMinimunSize(Dimension minimunSize) (JComponent)

javax.swing.BoxLayout
z javax.swing.GridBagLayout
z javax.swing.SpringLayout
z

void setPreferredSize(Dimension preferredSize) (JComponent)


void setAlignmentX (float alignmentX) (JComponent)
void setAlignmentY (float alignmentY) (JComponent)
z

Informacin que se indica al asociarle al panel

Organizacin de los elementos


grficos

Organizacin de los elementos


grficos

Un contenedor es un componente, tambin tiene un


tamao preferido, determinado por los componentes y
el administrador de distribucin que tenga en ese
momento

Cmo asignar un administrador de distribucin?

Si se quiere que la ventana de aplicacin tenga el tamao


preferido del componente que lleva dentro
z
z

public void pack() (mtodo de la clase Windows)


Es importante que este mtodo se ejecute despus de aadir todos los
componentes

public void setLayout(LayoutManager administrador)


(Mtodo de la clase Container)

Algunos administradores que requieren configuracin


se configuran en el constructor. La informacin de
configuracin asociada al componente se da al
aadirlo al contenedor

void add(Component componente, Object info)

Organizacin de los elementos


grficos

ndice

IMPORTANTE

Organizacin de los elementos grficos

La distribucin de componentes se realiza cuando se hace


visible el interfaz grfico, es decir, cuando se llama a
frame.setVisible(xxx) o show()
Qu ocurre si el contenedor ya es visible y se eliminan o
aaden nuevos componentes?
z
z

Hay que calcular de nuevo la posicin


En el contenedor donde se hayan realizado los cambios
void validate() (mtodo de la clase Container)

Administradores de distribucin
FlowLayout
BorderLayout
GridLayout
GridBagLayout
Administrador de distribucin nulo
Administracin por anidamiento de contenedores

FlowLayout

FlowLayout

Administrador por defecto de JPanel


Es el ms sencillo. Coloca los componentes con su tamao
preferido por filas. Va creando filas segn las vaya necesitando
Caractersticas:

Caractersticas:

Informacin asociada al componente No tiene


Configuracin del administrador Se puede indicar el espacio entre
componentes y la alineacin de stos en una lnea mediante las
constantes FlowLayout.CENTER, FlowLayout.RIGHT,
FlowLayout.LEFT y los constructores:
z
z
z

Informacin en el propio componente Solamente el tamao


preferido
Tamao preferido del contenedor Con una sola lnea. De alto como
el ms alto de la altura preferida de los componentes. De ancho como la
suma de las anchuras preferidas de los componentes ms el espacio de
separacin

public FlowLayout ()
public FlowLayout (int alineacion)
public FlowLayout (int alineacion, int espacionHorizontal, int
espacioVertical)

FlowLayout

FlowLayout
public class distflowlay {
private JButton boton;
public distflowlay(){
JFrame ventana = new JFrame("Ejemplo de FlowLayout");
ventana.setSize(300,200);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.boton=new JButton("ARRIBA");
JPanel panelC = new JPanel();
panelC.setLayout(new FlowLayout(FlowLayout.CENTER,6,10));
panelC.add(this.boton);
ventana.setContentPane(panelC);
ventana.setVisible(true);
}
public static void main(String[] args) {
new distflowlay();
}
}

ndice

BorderLayout

Organizacin de los elementos grficos

Divide el panel en 5 zonas

Administradores de distribucin
FlowLayout
BorderLayout
GridLayout
GridBagLayout
Administrador de distribucin nulo
Administracin por anidamiento de contenedores

BorderLayout

Alguna zona se puede quedar sin


componente
Cmo determina el tamao de las
regiones?
z

NORTH (a) y SOUTH (d): la altura


del tamao preferido del componente
en cada regin y la anchura del panel
WEST (b) y EAST (c): la anchura
del tamao preferido del componente
en cada regin y la altura del panel
menos la altura de los componentes
de NORTH y SOUTH
CENTER: tamao sobrante en
horizontal y vertical

WEST

NORTH

CENTER

EAST

b
d

c
SOUTH

BorderLayout

Caractersticas:
Informacin asociada al componente como segundo parmetro del
mtodo add(...) algunas de las constantes son BorderLayout.CENTER,
BorderLayout.WEST, BorderLayout.EAST, BorderLayout.SOUTH,
BorderLayout.NORTH
Configuracin del administrador Se puede especificar el espacio en
pxeles entre los componentes mediante el constructor:
z public BorderLayout(int espacioHorizontal, int espacioVertical)
z public BorderLayout()
Informacin en el propio componente el tamao preferido para
obtener la altura o la anchura
Tamao preferido del contenedor siguiendo el criterio para calcular
el tamao de las zonas y con el componente central con su tamao
preferido

BorderLayout

this.botonN = new JButton("NORTE");


this.botonS = new JButton("SUR");
this.botonOr = new JButton("ORIENTE");
this.botonOc = new JButton("OCCIDENTE");
this.botonC = new JButton("CENTRO");

ndice
Organizacin de los elementos grficos

JPanel panel = new JPanel();


panel.setLayout(new BorderLayout());
panel.add(this.botonN, BorderLayout.NORTH);
panel.add(this.botonS, BorderLayout.SOUTH);
panel.add(this.botonOr, BorderLayout.EAST);
panel.add(this.botonOc, BorderLayout.WEST);
panel.add(this.botonC, BorderLayout.CENTER);

Administradores de distribucin
FlowLayout
BorderLayout
GridLayout
GridBagLayout
Administrador de distribucin nulo
Administracin por anidamiento de contenedores

GridLayout

GridLayout

Divide el panel como una rejilla de celdas iguales. Segn se


van aadiendo los componentes se colocan en cada una de las
celdas ocupando todo el espacio posible a lo ancho y a lo alto.
Caractersticas:

JPanel panel = new JPanel();


panel.setLayout(new GridLayout(4,6, 2,2));

Informacin asociada al componente No tiene


Configuracin del administrador Se debe especificar el nmero de
filas y columnas de la rejilla. Tambin se puede especificar el espacio en
pxeles entre los componentes:
z

panel.add(new JButton("Boton1"));
panel.add(new JButton("boton2"));
panel.add(new JButton("boton3"));
panel.add(new JButton("Boton4"));
panel.add(new JButton("boton5"));
panel.add(new JButton("boton6"));

public GridLayout (int filas, int columnas)


public GridLayout (int filas, int columnas, int espacioHorizontal, int
espacioVertical)

Informacin en el propio componente No se usa


Tamao preferido del contenedor Se considera el tamao de cada
celda como el tamao preferido ms grande de entre todos los
componentes

GridLayout

ndice
Organizacin de los elementos grficos

Administradores de distribucin
FlowLayout
BorderLayout
GridLayout
GridBagLayout
Administrador de distribucin nulo
Administracin por anidamiento de contenedores

GridBagLayout

GridBagLayout

Divide al panel como una rejilla de celdas, pero stas


no tienen por qu tener el mismo tamao.
Cada componente puede ocupar una celda entera o
slo una parte. Si el componente va a ocupar un
tamao menor que la celda, puede estar centrado o
alineado a algn borde.
Un componente puede ocupar varias celdas. Al
conjunto de celdas ocupadas por un componente se le
denomina rea de visualizacin de ese componente

Caractersticas:

Informacin asociada al componente: Instancia de la


clase java.awt.GridBagConstraints
Configuracin del administrador: No tiene. Se usa el
constructor sin parmetros:
z

public GridBagLayout ()

Informacin en el propio componente: Dependiendo de la


informacin asociada, se puede necesitar el tamao mnimo
Tamao preferido del contenedor: La anchura se calcula
como la mxima de las anchuras mnimas de cada fila. La
altura se calcula de forma equivalente

GridBagLayout - GridBagConstraints

GridBagLayout - GridBagConstraints

Nmero de filas y columnas de la tabla: no es necesario especificarlo


Tamao de las celdas y de la tabla:

float weightx, float weighty Pueden tomar valores entre 0.0 y 1.0. Cuando su
valor es 0.0 (por defecto), entonces la tabla aparece centrada en el contenedor. Si el
valor weightx de alguna columna es mayor que 0.0, la tabla tendr la anchura del
contenedor, todas las columnas seguirn con el mismo tamao que antes excepto la
columna con el valor mayor que 0.0 que ocupar todo el espacio que sobre

float weightx, float weighty se especifica en


cada componente, pero se asocia a cada fila y
columna un nico valor

0.0

0.0

0.0

0.0

0.0

0.0

0.1

0.0

weightx

weighty

Lo mismo ocurre con las filas

GridBagLayout - GridBagConstraints

GridBagLayout - GridBagConstraints

rea de visualizacin ocupada por el componente dentro de la rejilla

Posicin del componente dentro del rea de visualizacin

int gridx, int gridy posicin de la celda superior izquierda de la bolsa


(comienzan con 0). Se especifica un nmero o GridBagConstraints.RELATIVE
(por defecto)
int gridwith, int gridheight nmero de celdas que ocupa la bolsa. Se
especifica un nmero (por defecto 1) o
z

GridBagConstraints.REMAINDER se indica que el rea de visualizacin


abarca hasta el final de la fila (gridwith) o hasta el final de la columna
(gridheight)
GridBagConstraints.RELATIVE se indica que el rea de visualizacin abarca
hasta el siguiente componente de la fila (gridwidth) o de la columna (gridheight)

int anchor especifica la posicin del componente dentro de su rea de


visualizacin cuando ste es ms grande que el tamao del componente. Puede
tomar los valores:
z

GridBagConstraints.NORTH

GridBagConstraints.SOUTH

GridBagConstraints.WEST

GridBagConstraints.EAST

GridBagConstraints.NORTHWEST

GrigBagConstraints.NORTHEAST

GridBagLayout - GridBagConstraints

GridBagLayout - GridBagConstraints

Posicin del componente dentro del rea de visualizacin

Tamao del componente dentro del rea de visualizacin

int anchor especifica la posicin del componente dentro de su rea de


visualizacin cuando ste es ms grande que el tamao del componente. Puede
tomar los valores:
z

GridBagConstraints.SOUTHWEST

GridBagConstraints.SOUTHEAST

GridBagConstraints.CENTER (por defecto)

int fill especifica qu tamao tiene el componente dentro del rea de


visualizacin. Puede tomar los valores:
z

GridBagConstraints.NONE (por defecto) componente del tamao preferido

GridBagConstraints.HORIZONTAL anchura como la anchura del rea de


visualizacin. La altura es la preferida

GridBagConstraints.VERTICAL altura como la altura del rea de


visualizacin y anchura preferida

GridBagConstraints.BOTH de igual tamao que el rea de visualizacin

GridBagLayout - GridBagConstraints

GridBagLayout - GridBagConstraints

Tamao del componente dentro del rea de visualizacin

JButton boton = new JButton("Boton");


JPanel panel = new JPanel();

Insets insets especifica el tamao alrededor del componente, por defecto no


existe tal espacio (clase java.awt.Insets)
int ipadx, int ipady aumenta la anchura preferida del componente en dos
veces ipady pxels y la altura en dos veces ipady pxels (debido a que se aplica
en los dos lados del componente)

panel.setLayout(new GridBagLayout());
GridBagConstraints config = new GridBagConstraints();

Tamao preferido del contenedor es el que ocupara la tabla si todos los


pesos fueran 0.0

config.weightx=1.0;
config.weighty=1.0;
//config.fill =GridBagConstraints.HORIZONTAL;
//config.anchor =GridBagConstraints.NORTH;
config.fill =GridBagConstraints.VERTICAL;
config.ipadx=4;
panel.add(boton, config);

GridBagLayout - GridBagConstraints

GridBagLayout - GridBagConstraints

Ejercicio

JButton boton1 = new JButton("Boton 1");


JButton boton2 = new JButton("Boton 2");
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints config1 = new GridBagConstraints();
config1.gridx=0;
config1.gridy=0;
panel.add(boton1, config1);
GridBagConstraints config2 = new GridBagConstraints();
config2.gridx=1;
config2.gridy=0;
panel.add(boton2, config2);

GridBagLayout - GridBagConstraints

JButton boton5 = new JButton("Boton 5");


JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints config1 = new GridBagConstraints();
config1.gridx=0;
config1.gridy=0;
panel.add(boton1, config1);
GridBagConstraints config5 = new GridBagConstraints();
config5.insets = new Insets(3,3,3,3);
config5.gridx=0;
config5.gridy=2;
config5.weightx = 1.0;
config5.weighty =0;
config5.gridwidth = 2;
panel.add(boton5, config5);

ndice
Organizacin de los elementos grficos

Administradores de distribucin
FlowLayout
BorderLayout
GridLayout
GridBagLayout
Administrador de distribucin nulo
Administracin por anidamiento de contenedores

Administrador de distribucin nulo

Administrador de distribucin nulo

Cuando se invoca setLayout(null) en un contenedor


Con este administrador los componentes se
redimensionaran segn

Organizacin de los elementos grficos

public void setSize (int anchura, int altura)

Si no se especifica un tamao entonces este ser de 0


pxel de alto y de 0 pxel de ancho
Si se quiere tamao predefinido

comp.setSize (comp.getPreferredSize())

Posicin

public void setLocation(int x, int y)

Administracin por anidamiento de


contenedores
Anidamiento de contenedores: se trata un
JPanel como si fuera un componente ms. En
ese panel irn cientos de componentes con
cierto administrador de distribucin, y ese
panel ir tambin dentro de otro contenedor ...

Administradores de distribucin
FlowLayout
BorderLayout
GridLayout
GridBagLayout
Administrador de distribucin nulo
Administracin por anidamiento de contenedores

ndice

Introduccin
Elementos grficos en Java
Pasos bsicos para crear un entorno grfico
Evolucin de los interfaces
Eventos en Java
Primera aplicacin
Clases annimas en los interfaces de usuario
Organizacin de los elementos grficos

Aprendiendo la API
Applet

ndice

Barras de desplazamiento

Organizacin de los elementos grficos

Cuando el tamao preferido de un componente


es muy grande, pero queremos que se vea
completo, se usan las barras de desplazamiento
Se crea un contenedor de la clase JScrollPane
Para mostrar un componente dentro de este
contenedor:

Aprendiendo la API
Barras de desplazamiento
Texto multilnea
Botones de radio

Applet

JScrollPane comConScroll = new JScrollPane(componente);

Barras de desplazamiento: Ejemplo

Barras de desplazamiento: GUI

JPanel panel = new JPanel();


panel.setLayout(new BorderLayout());
JTextArea texto= new JTextArea("escribe aqu", 20,20);
JScrollPane componenteSPane = new

JScrollPane(texto);

panel.add(componenteSPane);
)
ventana.setContentPane(panel);
ventana.setVisible(true);

ndice

Texto multilnea

Organizacin de los elementos grficos

El componente JTextField permite introducir texto de


una lnea. Para varias lneas se usa el componente
JTextArea los mtodos ms usados para este
componente:

Aprendiendo la API
Barras de desplazamiento
Texto multilnea
Botones de radio

Applet

Ejemplo de campos texto y password

etiqueta1 = new JLabel("User ");


etiqueta2 = new JLabel("Password ");
etiqueta3 = new JLabel("");
campoTexto = new JTextField(10);
password = new JPasswordField(10);
boton = new JButton("Aceptar");
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout(FlowLayout.CENTER));
panel.add(this.etiqueta1);
panel.add(this.etiqueta2);
panel.add(this.etiqueta3);
panel.add(this.campoTexto);
panel.add(this.password);
panel.add(this.boton);

Public void setText(String texto) pone el texto


Public String getText() obtiene el texto
Public void append(String texto) aade texto

Se suele usar dentro de un JScrollPane ya que el


nmero de lneas puede hacer que el componente sea
ms grande que el espacio asignado por administrador
de distribucin

ndice

Organizacin de los elementos grficos

Aprendiendo la API
Barras de desplazamiento
Texto multilnea
Botones de radio

Applet

Botones de radio
Cada botn de radio es una instancia de la clase
JRadioButton. los mtodos ms importantes de esta
clase son:

Ejemplo de botones de radio

botonGrupo = new ButtonGroup();


botonRadio1 = new JRadioButton("Hombre", true);
botonGrupo.add(botonRadio1);

public boolean isSelected() determina si est


seleccionado
public void setSelected(boolean seleccionado) establece
la seleccin o no del botn

botonRadio2 = new JRadioButton("Mujer", false);


botonGrupo.add(botonRadio2);
JPanel panel = new JPanel();

Para que un conjunto de botones de radio se agrupen


de forma que uno slo sea seleccionable, es necesario
usar una clase auxiliar: ButtonGroup.

panel.add(this.botonRadio1);
panel.add(this.botonRadio2);
ventana.setContentPane(panel);
ventana.setVisible(true);

public void add(AbstractButton boton)


}

GUI del ejemplo de botones de radio

Practica 8

ndice

Applet

Organizacin de los elementos grficos

Se ejecutan en pginas Web dentro del navegador. Sus


caractersticas fundamentales son:

Aprendiendo la API
Applet

Adems de la mquina virtual de java (JMV) necesitan un navegador


Web (o equivalente) para poder ejecutarse
Normalmente antes de ejecutarse se cargan desde un servidor Web
Su GUI est formada por una regin rectangular dentro de una pgina
HTML. El tamao y posicin de la regin se define en el cdigo HTML
de la pgina.
Normalmente finaliza la aplicacin cuando el usuario abandona la
pgina
Tiene restricciones de seguridad. No pueden acceder a disco y slo
pueden establecer conexiones de red con el servidor de que se
descargaron

Applet

Applet

Si el applet necesita recursos externos al propio


cdigo para ejecutarse, stos no se descargan hasta
que no se le indique en el cdigo, por tanto se puede
utilizar el siguiente esquema:

Cuando un applet intenta alguna operacin no permitida se eleva una


SecurityException, que se podr capturar para reaccionar de forma adecuada
En el documento HTML donde se visualiza el applet estn todos los datos necesarios
para su carga y ejecucin, para ello se utiliza una etiqueta especial:
<APPLET
CODEBASE = "."
ARCHIVE = "applet.jar"
CODE = "paquete.ClaseApplet.class"
NAME = "Nombre para el navegador"
WIDTH = 400
HEIGHT = 300
VSPACE = 0
HSPACE = 0 >
<PARAM NAME = "param1" VALUE = "valor1">
<PARAM NAME = "param2" VALUE = "valor2">
Este texto se muestra si el navegador no soporta java
</APPLET>

try {
URL url = new URL(this.getCodeBase().toString() + / + nombreFichero.txt);
InputStream input = url.openStream();
//... leemos los datos del InputStream
input.close();
} catch(IOException ioe){}
catch(MalformedURLException mue){}

Applet

Applet

CODEBASE (optativo/necesario) permite especificar el directorio


donde encontrar las clases o el fichero .jar si es distinto del directorio que
contiene la etiqueta APPLET
ARCHIVE (optativo/necesario) utilizado para identificar el fichero .jar
del applet si est empaquetado
CODE (necesario) nombre completo (con el paquete) de la clase que
hereda de JApplet
NAME (optativo) - cadena que describe el applet. Se lee en la barra de
estado del navegador
WIDTH/HEIGHT (necesario) define el tamao en pxeles asignado al
applet en el navegador
HSPACE/VSPACE (optativo) representa el relleno horizontal o vertical
en pxeles alrededor del applet
PARAM (optativo) permite especificar parmetros que posteriormente
se pueden leer dentro del applet

Implementacin
Es obligatorio que el applet sea una clase que herede de JApplet

No se usa el mtodo main. En lugar de ejecutarse este mtodo cuando


se inicia la aplicacin existen otros dos mtodos:

public void init () se ejecutar despus del constructor y antes de que


se muestre por pantalla. Se usa para construir el interfaz de usuario.

public void stop () se ejecuta cuando el usuario abandona la pgina


del applet o sale del navegador

public void start () se ejecuta despus del mtodo init () y cada vez
que se muestra el applet por pantalla

destroy () se usa cuando el applet va a ser destruido.


Para obtener los parmetros pasados en la etiqueta <APPLET> se utiliza el
mtodo de la clase JApplet

public String getParameter (String name)

Applet
public class AppletPrueba extends JApplet {
public void init(){
Conversor conversor = new Conversor();
this.setContentPane(conversor.getPanel());

}
}
<HTML>
<HEAD><TITLE> La pgina del applet </TITLE></HEAD>
<BODY>
Este es mi conversor.
<APPLET CODE = "AppletPrueba.class" WIDTH = 300 HEIGHT
= 200>
</APPLET>
</BODY>
</HTML>

10