SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
PRACTICA	
   UN	
   EJERCICIO	
   PARA	
   UILIZAR	
   LA	
  
INTERFASE	
  GRAFICA	
  	
  
	
  
JAVA	
   construye	
   las	
   interfaces	
   gráficas	
   del	
  
usuario	
   mediante	
   AWT.	
   Para	
   crear	
   una	
   interfaz	
  
gráfica	
  de	
  usuario	
  hace	
  falta	
  un	
  contenedor	
  que	
  
es	
   la	
   ventana	
   donde	
   se	
   situarán	
   los	
  
componentes	
   (como	
   botones,	
   cajas	
   de	
   texto,	
  
etiquetas,	
  entre	
  otros)	
  y	
  donde	
  se	
  realizarán	
  los	
  
dibujos.	
   Lo	
   podemos	
   relacionar	
   con	
   los	
  
formularios,	
   los	
   componentes	
   como	
   tal	
   y	
   el	
  
modelo	
  de	
  eventos,	
  que	
  son	
  las	
  respuestas	
  a	
  las	
  
acciones	
   como	
   presionar	
   un	
   botón	
   o	
   hacer	
   un	
  
click	
   de	
   ratón.	
   Cuando	
   el	
   usuario	
   realiza	
   una	
  
determinada	
   acción,	
   se	
   produce	
   el	
   evento	
  
correspondiente	
   que	
   el	
   SO	
   transmite	
   al	
   AWT,	
  
este	
   crea	
   un	
   objeto	
   de	
   una	
   determinada	
   clase	
   de	
  
evento	
   derivada	
   de	
   AWTEvent	
   y	
   el	
   evento	
   es	
  
trasmitido	
   a	
   un	
   determinado	
   método	
  
(procedimiento	
   o	
   función	
   de	
   la	
   clase)	
   para	
   que	
  
lo	
   gestione.	
   El	
   componente	
   u	
   objeto	
   que	
   recibe	
  
el	
   evento	
   debe	
   indicar	
   previamente	
   que	
   objeto	
  
se	
  va	
  a	
  hacer	
  cargo	
  de	
  gestionar	
  el	
  evento.	
  
El	
  modelo	
  de	
  eventos	
  de	
  JAVA	
  
	
  Está	
  basado	
  en	
  que	
  los	
  objetos	
  sobre	
  los	
  que	
  se	
  
producen	
   los	
   eventos	
   o	
   event	
   sources	
   registran	
  
los	
  objetos	
  que	
  los	
  gestionarán	
  (event	
  listener),	
  
para	
   lo	
   cual	
   los	
   event	
   listener	
   habrán	
   de	
  
disponer	
   de	
   los	
   métodos	
   adecuados.	
   Esos	
  
métodos	
   se	
   llamarán	
   automáticamente	
   cuando	
  
se	
   produzca	
   el	
   evento,	
   la	
   forma	
   de	
   garantizar	
  
que	
   los	
   event	
   listener	
   disponen	
   de	
   los	
   métodos	
  
apropidos	
   para	
   gestionar	
   los	
   eventos	
   es	
  
obligarles	
   a	
   implementar	
   una	
   determinada	
  
interface	
   Listener,	
   estas	
   interfaces	
   se	
  
corresponden	
  con	
  los	
  tipo	
  oris	
  de	
  eventos	
  que	
  se	
  
pueden	
  producir.	
  
Proceso	
   para	
   crear	
   una	
   aplicación	
   interactiva	
  
orientada	
   a	
   eventos	
   con	
   interfase	
   gráfica	
   de	
  
usuario.	
  
Determinar	
   los	
   componentes	
   que	
   van	
   a	
  
constituir	
  la	
  interfase	
  de	
  usuario,	
  como	
  botones,	
  
cajas	
  de	
  texto,	
  menús,	
  etc.	
  
Crear	
  una	
  clase	
  para	
  la	
  aplicaci;on	
  que	
  contenga	
  
la	
  función	
  main().	
  
Crear	
   una	
   clase	
   Ventana,	
   sub	
   clase	
   de	
   Frame,	
  
que	
  corresponda	
  al	
  evento	
  WindowClosing().	
  
La	
   función	
   main()	
   deberá	
   crear	
   un	
   objeto	
   de	
   la	
  
clase	
   ventana	
   para	
   colocar	
   los	
   componentes	
   y	
  
mostrarla	
   por	
   pantalla	
   con	
   el	
   tamaño	
   y	
   la	
  
posición	
  adecuados.	
  
Añadir	
  al	
  objeto	
  Ventana	
  todos	
  los	
  componentes	
  
y	
  menús	
  que	
  deba	
  contener.	
  	
  Se	
  puede	
  hacer	
  un	
  
constructor	
  de	
  la	
  Ventana	
  o	
  en	
  el	
  propio	
  método	
  
main().	
  
Definir	
   los	
   objetos	
   listener	
   (aquellos	
   que	
  
respondan	
              a	
        eventos	
         cuyas	
         clases	
  
implementarán	
  las	
  distintas	
  interfases	
  Listener	
  )	
  
para	
   cada	
   uno	
   de	
   los	
   eventos	
   que	
   deban	
   estar	
  
soportados.	
  En	
  aplicaciones	
  pequeñas,	
  el	
  propio	
  
objeto	
  ventana	
  se	
  puede	
  ocupar	
  de	
  responder	
  a	
  
los	
   eventos	
   de	
   sus	
   componentes.	
   En	
   programas	
  
mas	
   grandes	
   se	
   puede	
   crear	
   uno	
   o	
   mas	
   objetos	
  
de	
   clases	
   especiales	
   para	
   ocuparse	
   de	
   los	
  
eventos.	
  
Finalmente,	
   se	
   deben	
   implementar	
   los	
   métodos	
  
de	
   las	
   interfases	
   listener	
   que	
   se	
   vayan	
   a	
   hacer	
  
cargo	
  de	
  la	
  gestión	
  de	
  los	
  eventos.	
  
	
  
Como	
  ejemplo	
  vamos	
  a	
  realizar	
  un	
  programa	
  en	
  
JAVA	
   que	
   sirva	
   de	
   juego	
   para,	
   en	
   una	
   ventana	
  
contenedora	
   de	
   botones	
   amarillos	
   y	
   rojos,	
   al	
  
clickear	
  sobre	
  uno	
  de	
  ellos	
  aparezca	
  el	
  color	
  del	
  
botón	
  seleccionado.	
  
En	
   NetBeans	
   vamos	
   a	
   abrir	
   un	
   proyecto	
  
identificándolo	
  con	
  el	
  nombre	
  Juego	
  y	
  lo	
  vamos	
  
a	
   colocar	
   en	
   el	
   escritorio.	
   A	
   la	
   carpeta	
   SRC	
   le	
  
vamos	
   a	
   añadir	
   dos	
   clases	
   adicionales	
   a	
   la	
  
principal.	
  Una	
  clase	
  se	
  va	
  a	
  llamar	
  Botonera	
  y	
  la	
  
otra	
  OyenteAcciones.	
  
Vamos	
  a	
  importar	
  las	
  siguientes	
  librerías	
  
Javax.swing.*	
  
Java.awt.*	
  
Java.awt.event.*	
  
	
  
La	
   clase	
   Botonera	
   la	
   vamos	
   a	
   llenar	
   de	
   botones	
  
amarillos	
   y	
   rojos.	
   Esta	
   clase	
   va	
   a	
   heredar	
   los	
  
atributos	
   y	
   métodos	
   de	
   la	
   clase	
   JPanel	
   (por	
   lo	
  
que	
   hay	
   que	
   colocar	
   que	
   la	
   clase	
   Botonera	
  
extends	
  	
  JPanel.	
  Podemos	
  entonces	
  declarar	
  	
  
Public	
   Botonera	
   (int	
   tamaño)	
   {	
   	
   para	
   colocar	
  
JButton	
   [][]	
   botones:	
   y	
   así	
   crear	
   una	
   matriz	
   de	
  
botones,	
   se	
   instancia	
   botones	
   con	
   new	
   JButton	
  
[tamaño][tamaño].	
   Se	
   crea	
   un	
   oyente	
   de	
  
acciones	
   para	
   los	
   eventos	
   con	
   la	
   otra	
   clase	
   que	
  
creamos	
  en	
  el	
  proyecto,	
  OyenteAcciones	
  oyente	
  
=	
  new	
  OyenteAcciones(this):.	
  Con	
  un	
  doble	
  ciclo	
  
se	
  crean	
  los	
  objetos	
  botones	
  	
  
For	
  (int	
  i=0;i<botones.length;i++){	
  
	
     For	
  (int	
  j=0;j<botones[i].length;i++){	
  
Dentro	
  del	
  doble	
  ciclo	
  codificamos	
  
botones[i][j]=new	
  JButton();	
  
botones[i][j].setPreferredSize(newDimension(5
0,50));	
  
if	
  ((i+j+1)%2==0)	
  {	
  
botones[i][j].setBackground(Color.BLACK);	
  }	
  
De	
   esta	
   manera	
   coloreamos	
   los	
   botones	
   en	
  
negro	
   de	
   manera	
   intercalada	
   con	
   el	
   color	
   por	
  
defecto,	
  que	
  sería	
  el	
  blanco.	
  
Fuera	
  del	
  doble	
  ciclo	
  codificamos	
  
setLayout(new	
  GridLayout	
  (tamano,tamano));	
  
En	
   java,	
   cuando	
   hacemos	
   ventanas,	
   la	
   clase	
   que	
  
decide	
   cómo	
   se	
   reparten	
   los	
   botones	
   (Y	
   demás	
  
controles)	
  dentro	
  de	
  la	
  ventana	
  se	
  llama	
  Layout.	
  
Esta	
   clase	
   es	
   la	
   que	
   decide	
   en	
   qué	
   posición	
   van	
  
los	
   botones	
   y	
   demás	
   componentes,	
   si	
   van	
  
alineados,	
   en	
   forma	
   de	
   matriz,	
   cuáles	
   se	
   hacen	
  
grandes	
   al	
   agrandar	
   la	
   ventana,	
   etc.	
   Otra	
   cosa	
  
importante	
  que	
  decide	
  el	
  Layout	
  es	
  qué	
  tamaño	
  
es	
   el	
   ideal	
   para	
   la	
   ventana	
   en	
   función	
   de	
   los	
  
componentes	
  que	
  lleva	
  dentro.	
  
Con	
   un	
  layout	
  adecuado,	
   el	
   método	
  pack()	
  de	
   la	
  
ventana	
  hará	
  que	
  coja	
  el	
  tamaño	
  necesario	
  para	
  
que	
  se	
  vea	
  todo	
  lo	
  que	
  tiene	
  dentro.	
  
Este	
   pone	
   los	
   componentes	
   en	
   forma	
   de	
   matriz	
  
(cuadrícula),	
  estirándolos	
  para	
  que	
  tengan	
  todos	
  
el	
   mismo	
   tamaño.	
   El	
  GridLayout	
  es	
   adecuado	
  
para	
   hacer	
   tableros,	
   calculadoras	
   en	
   que	
   todos	
  
los	
  botones	
  son	
  iguales,	
  etc.	
  
//	
   Creación	
   de	
   los	
   botones	
   JButton	
   boton[]	
   =	
  
new	
   JButton[9];	
   for	
   (int	
   i=0;i<9;i++)	
   	
   	
   	
   boton[i]	
   =	
  
new	
  JButton(Integer.toString(i));	
  	
  //	
  Colocación	
  
en	
   el	
   contenedor	
   contenedor.setLayout	
   (new	
  
GridLayout	
   (3,3));	
   	
   //	
   3	
   filas	
   y	
   3	
   columnas	
   for	
  
(int	
   i=0;i<9;i++)	
   	
   	
   	
   	
   contenedor.add	
   (boton[i]);	
  	
  
//	
  Añade	
  los	
  botones	
  de	
  1	
  en	
  1.	
  	
  
Terminamos	
  la	
  clase	
  con	
  
private	
  Dimension	
  newDimension(int	
  i,	
  int	
  i0)	
  {	
  
return	
  null;	
  
	
  
	
  	
  	
  	
  }	
  
Aquí	
   creamos	
   una	
   Dimension	
   cuya	
   anchura	
   y	
  
altura	
   son	
   las	
   que	
   se	
   especifican	
   en	
   los	
  
argumentos.	
  
En	
   la	
   clase	
   OyenteAcciones	
   implementamos	
   un	
  
oidor,	
   ya	
   que	
   tenemos	
   el	
   evento	
   que	
   va	
   a	
   activar	
  
a	
  una	
  caja	
  de	
  mensajes	
  para	
  indicar	
  el	
  color	
  del	
  
botón.	
  
public	
   class	
   OyenteAcciones	
   implements	
  
ActionListener	
  {	
  
	
  
	
  	
  	
  	
  private	
  JPanel	
  panel;	
  
	
  
	
  	
  	
  	
  public	
  OyenteAcciones(JPanel	
  panel){	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  this.panel=panel;	
  
	
  
	
  	
  	
  	
  }	
  
	
  	
  	
  	
  public	
  void	
  actionPerformed(ActionEvent	
  
evento)	
  {	
  
	
  
 	
  	
  	
  	
  	
  	
  	
  JButton	
  boton=(JButton)	
  
evento.getSource();	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  String	
  color="BLANCO";	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  if	
  (boton.getBackground()==Color.BLACK)	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  color="NEGRO";	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  JOptionPane.showMessageDialog(panel,	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  "Se	
  ha	
  pulsado	
  un	
  boton	
  de	
  color	
  "+	
  color,	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  "Boton	
  Pulsado",	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  JOptionPane.INFORMATION_MESSAGE);	
  
	
  
	
  	
  	
  	
  }	
  
}	
  
	
  
Por	
  último,	
  en	
  el	
  main	
  java	
  creamos	
  la	
  botonera	
  
y	
  ps	
  colocamos	
  en	
  la	
  ventana	
  contenedora	
  
	
  
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  
	
  	
  	
  	
  	
  	
  	
  JFrame	
  ventana=new	
  JFrame("BOTONERA");	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  Botonera	
  botonera	
  =	
  new	
  Botonera(18);	
  
	
  
 	
  	
  	
  	
  	
  	
  	
  ventana.add(botonera);	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  ventana.pack();	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  ventana.setVisible(true);	
  }	
  
	
  
	
  
	
  
-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐	
  
	
  
             Contenedores	
  y	
  gestión	
  de	
  los	
  
                       layout	
  
En	
  la	
  lección	
  anterior	
  hemos	
  visto	
  como	
  
introducir	
  en	
  nuestras	
  aplicaciones	
  y	
  en	
  
nuestros	
  apliques	
  unas	
  etiquetas	
  y	
  unos	
  
botones.	
  Para	
  hacerlo	
  hemos	
  utilizado	
  unos	
  
contenedores	
  y	
  unos	
  layout	
  sin	
  saber	
  cómo	
  
funcionaban.	
  En	
  este	
  lección	
  analizeremos	
  sus	
  
funcionamientos	
  y	
  cómo	
  aprovecharlos	
  para	
  
mejorar	
  nuestras	
  interfaces.	
  
Empezamos	
  con	
  describir	
  la	
  clase	
  Container	
  del	
  
paquete	
  java.awt.	
  Es	
  una	
  extensión	
  de	
  la	
  clase	
  
Component	
  de	
  la	
  que	
  proceden	
  todos	
  los	
  
componentes	
  GUI	
  y,	
  en	
  realidad,	
  éste	
  mismo	
  es	
  
un	
  componente	
  GUI.	
  
	
  
 
	
  
	
  
Un	
  Container	
  es	
  un	
  contenedor	
  para	
  los	
  objetos	
  
GUI	
  y,	
  por	
  lo	
  tanto,	
  también	
  para	
  los	
  demás	
  
container.	
  Se	
  utiliza	
  junto	
  a	
  un	
  Layout	
  Manager	
  y	
  
permite	
  que	
  abarquen	
  más	
  de	
  un	
  GUI	
  (y	
  
Contenedores),	
  permitiendo	
  que	
  aparezcan	
  
varios	
  objetos	
  en	
  nuestras	
  interfaces.	
  Vemos	
  qué	
  
contiene	
  la	
  clase.	
  
Container()	
  ,	
  es	
  el	
  único	
  constructor	
  de	
  la	
  clase.	
  
	
  
Unos	
  métodos:	
  Component	
  add(Component	
  
comp),	
  añade	
  el	
  componente	
  al	
  final	
  del	
  
contenedor.	
  
Component	
  add(Component	
  comp,	
  int	
  index),	
  
añade	
  el	
  componente	
  en	
  la	
  posición	
  indicada	
  por	
  
el	
  contenedor.	
  
void	
  add(Component	
  comp,	
  Object	
  constraints)	
  e	
  
void	
  add(Component	
  comp,	
  Object	
  constraints,	
  int	
  
index)	
  ,	
  como	
  antes,	
  lo	
  único	
  es	
  que	
  especifica	
  
unas	
  constantes	
  para	
  el	
  componente	
  que	
  se	
  ha	
  
introducido.	
  
Component	
  add(String	
  name,	
  Component	
  comp),	
  
añade	
  al	
  contenedor	
  el	
  componente	
  y	
  le	
  da	
  un	
  
nombre.	
  
void	
  addContainerListener(ContainerListener	
  l),	
  
ajusta	
  el	
  ContainerListener	
  que	
  escuchará	
  los	
  
sucesos	
  que	
  han	
  ocurrido	
  en	
  el	
  contenedor.	
  
void	
  doLayout(),	
  provoca	
  la	
  disposición	
  de	
  los	
  
componentes	
  en	
  el	
  contenedor.	
  
Component	
  findComponentAt(int	
  x,	
  int	
  y),	
  
devuelve	
  el	
  componente	
  que	
  se	
  encuentra	
  en	
  la	
  
posición	
  especificada	
  del	
  contenedor	
  (posición	
  
gráfica).	
  
Component	
  findComponentAt(Point	
  p)	
  ,	
  devuelve	
  
el	
  componente	
  que	
  se	
  encuentra	
  en	
  la	
  posición	
  
especificada	
  del	
  contenedor	
  (posición	
  gráfica).	
  
float	
  getAlignmentX(),	
  devuelve	
  el	
  ajuste	
  de	
  
líneas	
  a	
  lo	
  largo	
  del	
  eje	
  X	
  del	
  contenedor.	
  	
  
float	
  getAlignmentY(),	
  devuelve	
  el	
  ajuste	
  de	
  
líneas	
  a	
  lo	
  largo	
  del	
  eje	
  Y	
  del	
  contenedor.	
  
Component	
  getComponent(int	
  n),	
  devuelve	
  el	
  
enésimo	
  componente	
  introducido	
  en	
  el	
  
contenedor.	
  
Component	
  getComponentAt(int	
  x,	
  int	
  y),	
  
devuelve	
  el	
  componente	
  que	
  se	
  encuentra	
  en	
  la	
  
posición	
  especificada	
  del	
  contenedor	
  (posición	
  
gráfica).	
  	
  
Component	
  getComponentAt(Point	
  p),	
  devuelve	
  
el	
  componente	
  que	
  se	
  encuentra	
  en	
  la	
  posición	
  
especificada	
  del	
  contenedor	
  (posición	
  gráfica).	
  
int	
  getComponentCount()	
  ,	
  da	
  el	
  número	
  de	
  
componentes	
  introducidos	
  en	
  el	
  contenedor.	
  
	
  
Component[]	
  getComponents(),	
  da	
  todos	
  los	
  
componentes	
  introducidos	
  en	
  el	
  contenedor.	
  
Insets	
  getInsets(),	
  da	
  un	
  objeto	
  Insets	
  para	
  el	
  
contenedor.	
  Este	
  objeto	
  representa	
  el	
  tamaño	
  
(gráfico=	
  del	
  contenedor.	
  
LayoutManager	
  getLayout(),	
  devuelve	
  el	
  
LayuotManager	
  asociado	
  al	
  contenedor.	
  
EventListener[]	
  getListeners(Class	
  listenerType),	
  
devuelve	
  todos	
  los	
  oyentes	
  de	
  sucesos	
  al	
  
contenedor.	
  	
  
Dimension	
  getMaximumSize(),	
  devuelve	
  el	
  
tamaño	
  máximo	
  que	
  puede	
  tener	
  el	
  contenedor.	
  	
  
Dimension	
  getMinimumSize(),	
  devuelve	
  el	
  
tamaño	
  mínimo	
  que	
  puede	
  tener	
  el	
  contenedor.	
  	
  
Dimension	
  getPreferredSize(),	
  devuelve	
  el	
  
tamaño	
  preferido	
  por	
  el	
  contenedor.	
  
void	
  list(PrintStream	
  out,	
  int	
  indent),	
  imprime	
  el	
  
listado	
  de	
  los	
  componentes	
  introducidos	
  en	
  el	
  
contenedor,	
  sobre	
  un	
  stream	
  de	
  output.	
  	
  
void	
  list(PrintWriter	
  out,	
  int	
  indent),	
  imprime	
  en	
  
una	
  impresora	
  los	
  componentes	
  introducidos	
  en	
  
el	
  contenedor.	
  
void	
  paint(Graphics	
  g),	
  dibuja	
  el	
  contenedor.	
  La	
  
paint	
  es	
  una	
  función	
  muy	
  importante.	
  Veremos	
  
cómo	
  definirla	
  para	
  dibujar	
  en	
  una	
  ventana.	
  
void	
  paintComponents(Graphics	
  g).	
  dibuja	
  todos	
  
los	
  componentes	
  del	
  contenedor.	
  
void	
  print(Graphics	
  g),	
  imprime	
  el	
  contenedor	
  
(el	
  aspecto	
  gráfico).	
  
void	
  printComponents(Graphics	
  g),	
  imprime	
  
todos	
  los	
  componentes	
  introducidos	
  en	
  el	
  
contenedor	
  (sus	
  aspectos	
  gráficos).	
  
void	
  remove(Component	
  comp),	
  elimina	
  el	
  
componente	
  especificado	
  por	
  el	
  contenedor.	
  
void	
  remove(int	
  index),	
  aparta	
  el	
  componente	
  
que	
  se	
  encuentra	
  en	
  la	
  posición	
  especificada	
  en	
  
el	
  contenedor.	
  
void	
  removeAll(),	
  aparta	
  todos	
  los	
  componentes	
  
introducidos	
  en	
  el	
  contenedor.	
  
void	
  removeContainerListener(ContainerListener	
  
l),	
  elimina	
  el	
  oyente	
  de	
  sucesos	
  para	
  containers	
  
de	
  este	
  container.	
  
void	
  setFont(Font	
  f),	
  ajusta	
  las	
  Font	
  utilizadas	
  
por	
  el	
  texto	
  en	
  el	
  contenedor.	
  
void	
  setLayout(LayoutManager	
  mgr),	
  asocia	
  al	
  
contenedor	
  un	
  gestor	
  de	
  layout.	
  
void	
  update(Graphics	
  g),	
  vuelve	
  a	
  dibujar	
  el	
  
contenedor.	
  
void	
  validate(),	
  anula	
  el	
  contenedor	
  y	
  sus	
  
componentes.	
  
	
  
Introduciendo	
  componentes	
  en	
  el	
  contenedor,	
  
como	
  en	
  el	
  ejemplo	
  sucesivo,	
  nos	
  damos	
  cuenta	
  
de	
  que	
  sólo	
  el	
  último	
  será	
  visualizado.	
  Esto	
  
ocurre	
  porque	
  no	
  hemos	
  dado	
  gestor	
  de	
  Layout.	
  
En	
  el	
  caso	
  de	
  applet,	
  en	
  cambio,	
  el	
  
LayoutManager	
  de	
  default	
  es	
  el	
  FlowLayout.	
  
	
  
import	
  java.awt.*;	
  
	
  
public	
  class	
  Contenedor	
  extends	
  Frame	
  
{	
  
	
  
Label	
  l1=new	
  Label("Etiqueta1");	
  
Label	
  l2=new	
  Label("Etiqueta2");	
  
Label	
  l3=new	
  Label("Etiqueta3");	
  
Label	
  l4=new	
  Label("Etiqueta4");	
  
Label	
  l5=new	
  Label("Etiqueta5");	
  
	
  
public	
  Contenedor()	
  
{	
  
//	
  uso	
  add,	
  porque	
  el	
  Frame	
  es	
  una	
  extensión	
  de	
  
Window,	
  que	
  a	
  su	
  
//	
  vez	
  amplía	
  Container.	
  
	
  
add(l1);	
  
add(l2);	
  
add(l3);	
  
add(l4);	
  
add(l5);	
  
doLayout();	
  
pack();	
  
show();	
  
}	
  
	
  
public	
  static	
  void	
  main(String	
  []	
  arg)	
  
{	
  
 
new	
  Contenedor();	
  
	
  
}	
  
	
  
}	
  
	
  
Por	
  lo	
  tanto,	
  vemos	
  cómo	
  introducir	
  un	
  gestor	
  
de	
  Layout	
  en	
  el	
  contenedor.	
  El	
  método	
  de	
  la	
  
clase	
  container	
  que	
  lo	
  permite	
  es	
  void	
  
setLayout(LayoutManager	
  mgr).	
  No	
  nos	
  queda	
  
que	
  ver	
  cómo	
  es	
  el	
  objeto	
  de	
  tipo	
  
LayoutManager.	
  
LayoutManager	
  es	
  una	
  interfaz.	
  De	
  las	
  clases	
  
que	
  la	
  implementan	
  analizaremos	
  GridLayout,	
  
FlowLayout.	
  
Hay	
  otra	
  interfaz	
  llamada	
  LayoutManager2,	
  que	
  
amplía	
  ésta	
  y	
  que	
  tiene	
  otras	
  clases	
  que	
  la	
  
implementan.	
  De	
  éstas	
  veremos:	
  CardLayout,	
  
BorderLayout,	
  GridBagLayout,	
  BoxLayout,	
  
OverlayLayout.	
  
Por	
  lo	
  tanto,	
  en	
  el	
  método	
  setLayout	
  (…)	
  
podemos	
  utilizar	
  como	
  parámetro	
  un	
  objeto	
  de	
  
estas	
  clases.	
  
Llegados	
  a	
  este	
  punto,	
  tenemos	
  que	
  comprender	
  
qué	
  diferencia	
  hay	
  entre	
  los	
  layout	
  manager.	
  
El	
  FlowLayout	
  deja	
  colocar	
  los	
  componentes	
  de	
  
un	
  contenedor	
  de	
  la	
  izquierda	
  hacia	
  la	
  derecha	
  
en	
  una	
  sóla	
  línea.	
  
	
  




                                                                      	
  
	
  
	
  
Para	
  utilizar	
  el	
  LayoutManager	
  FlowLayout	
  del	
  
ejemplo	
  precedente	
  basta	
  con	
  invocar	
  el	
  método	
  
setLayout	
  con	
  parámetro	
  new	
  FlowLayout(),	
  y	
  
después	
  los	
  componentes	
  se	
  introducen	
  
automáticamente,	
  de	
  la	
  add	
  de	
  la	
  derecha	
  hacia	
  
la	
  izquierda	
  en	
  la	
  misma	
  línea.	
  
	
  
import	
  java.awt.*;	
  
	
  
public	
  class	
  ContEFL	
  extends	
  Frame	
  
{	
  
	
  
Label	
  l1=new	
  Label("Etiqueta1");	
  
Label	
  l2=new	
  Label("Etiqueta2");	
  
Label	
  l3=new	
  Label("Etiqueta3");	
  
Label	
  l4=new	
  Label("Etiqueta4");	
  
Label	
  l5=new	
  Label("Etiqueta5");	
  
	
  
public	
  ContEFL()	
  
{	
  
//	
  uso	
  add,	
  porque	
  el	
  Frame	
  es	
  una	
  extensión	
  de	
  
Window,	
  que	
  a	
  su	
  
//	
  vez	
  amplía	
  Container.	
  
	
  
setLayout(new	
  FlowLayout());	
  
	
  
add(l1);	
  
add(l2);	
  
add(l3);	
  
add(l4);	
  
add(l5);	
  
	
  
pack();	
  
show();	
  
	
  
}	
  
	
  
public	
  static	
  void	
  main(String	
  []	
  arg)	
  
{	
  
	
  
new	
  ContEFL();	
  
	
  
}	
  
	
  
}	
  
	
  
La	
  ventana	
  que	
  sale	
  es:	
  
	
  
 
	
  
	
  
El	
  GridLayout	
  permite	
  colocar	
  los	
  componentes	
  
en	
  un	
  contenedor	
  como	
  si	
  se	
  dispusieran	
  en	
  una	
  
plantilla.	
  
	
  




                                                         	
  
	
  
	
  
Todos	
  los	
  componentes	
  tendrán	
  el	
  mismo	
  
tamaño.	
  La	
  clase	
  tiene	
  tres	
  constructores,	
  uno	
  
sin	
  parámetros	
  que	
  crea	
  una	
  planilla	
  con	
  1	
  línea,	
  
prácticamente	
  un	
  FlowLayout,	
  y	
  otros	
  dos	
  que	
  
permiten	
  especificar	
  el	
  tamaño	
  de	
  la	
  planilla.	
  
El	
  ejemplo	
  anterior	
  cambia	
  de	
  esta	
  forma:	
  
	
  
import	
  java.awt.*;	
  
 
public	
  class	
  ContEGL	
  extends	
  Frame	
  
{	
  
	
  
Label	
  l1=new	
  Label("Etiqueta1");	
  
Label	
  l2=new	
  Label("Etiqueta2");	
  
Label	
  l3=new	
  Label("Etiqueta3");	
  
Label	
  l4=new	
  Label("Etiqueta4");	
  
Label	
  l5=new	
  Label("Etiqueta5");	
  
	
  
public	
  ContEGL()	
  
{	
  
//	
  uso	
  add,	
  poruqe	
  el	
  Frame	
  es	
  una	
  extensión	
  de	
  
Window,	
  que	
  a	
  su	
  
//	
  vez	
  amplía	
  Container.	
  
	
  
setLayout(new	
  GridLayout(2,3));	
  
	
  
add(l1);	
  
add(l2);	
  
add(l3);	
  
add(l4);	
  
add(l5);	
  
	
  
pack();	
  
show();	
  
	
  
}	
  
	
  
public	
  static	
  void	
  main(String	
  []	
  arg)	
  
{	
  
	
  
new	
  ContEGL();	
  
	
  
}	
  
	
  
}	
  
	
  
La	
  ventana	
  es	
  la	
  siguiente:	
  
	
  



                                                            	
  
	
  
	
  
El	
  LayoutManager	
  CardLayout	
  permite	
  
visualizar	
  los	
  componentes	
  diferentes	
  en	
  plazos	
  
de	
  tiempo	
  diferentes,	
  es	
  decir,	
  que	
  visualiza	
  sólo	
  
un	
  componente	
  a	
  la	
  vez.	
  Sin	
  embargo	
  el	
  
componete	
  visualizado	
  se	
  puede	
  cambiar.	
  
Hay	
  aquí	
  un	
  ejemplo	
  del	
  uso	
  de	
  CardLayout	
  
	
  
import	
  java.awt.*;	
  
import	
  java.awt.event.*;	
  
	
  
public	
  class	
  ContECL	
  extends	
  Frame	
  
{	
  
 
Label	
  l1=new	
  Label("Etiqueta1");	
  
Label	
  l2=new	
  Label("Etiqueta2");	
  
Label	
  l3=new	
  Label("Etiqueta3");	
  
Label	
  l4=new	
  Label("Etiqueta4");	
  
Label	
  l5=new	
  Label("Etiqueta5");	
  
	
  
Panel	
  p=new	
  Panel(new	
  GridLayout(2,1));	
  
CardLayout	
  CL=new	
  CardLayout(14,14);	
  
Panel	
  p1=new	
  Panel(CL);	
  
Panel	
  NPB=new	
  Panel(new	
  FlowLayout());	
  
	
  
public	
  ContECL()	
  
{	
  
	
  
	
  
	
  
p.add(NPB);	
  
p.add(p1);	
  
	
  
Button	
  N=new	
  Button("Próximo");	
  
Button	
  P=new	
  Button("Anterior");	
  
	
  
NPB.add(P);	
  
NPB.add(N);	
  
	
  
P.addActionListener(new	
  ActionListener()	
  
{	
  
public	
  void	
  actionPerformed(ActionEvent	
  e)	
  
{	
  
CL.previous(p1);	
  
}	
  
}	
  
);	
  
	
  
N.addActionListener(new	
  ActionListener()	
  
{	
  
public	
  void	
  actionPerformed(ActionEvent	
  e)	
  
{	
  
CL.next(p1);	
  
}	
  
}	
  
);	
  
	
  
p1.add("uno",l1);	
  
p1.add("dos",l2);	
  
p1.add("tres",l3);	
  
p1.add("cuatro",l4);	
  
p1.add("cinco",l5);	
  
	
  
add(p);	
  
pack();	
  
show();	
  
	
  
}	
  
	
  
public	
  static	
  void	
  main(String	
  []	
  arg)	
  
{	
  
 
new	
  ContECL();	
  
	
  
}	
  
	
  
}	
  
	
  
El	
  resultado	
  de	
  los	
  ejemplos	
  son	
  las	
  siguientes	
  
ventanas:	
  
	
  




                                                   	
  
                                     	
  




                                                   	
  
                                     	
  




                                                   	
  
                                     	
  
 
                                          	
  




                                                         	
  
Muestran	
  como	
  las	
  cinco	
  etiquetas	
  aparecen	
  en	
  
la	
  misma	
  posición	
  en	
  plazos	
  de	
  tiempo	
  
diferentes.	
  
Notad	
  que	
  en	
  el	
  ejemplo	
  no	
  se	
  han	
  utilizado	
  los	
  
demás	
  gestores	
  de	
  Layout	
  para	
  que	
  se	
  puedan	
  
introducir	
  los	
  botones	
  Próximo	
  y	
  Anterior.	
  
	
  
BorderLayout	
  es	
  uno	
  de	
  los	
  gestores	
  de	
  Layout	
  
más	
  utilizados.	
  Permite	
  introducir	
  en	
  un	
  
contenedor	
  cinco	
  componentes,	
  uno	
  al	
  Norte,	
  
uno	
  al	
  Sur,	
  uno	
  al	
  Este,	
  uno	
  al	
  Oeste	
  y	
  otro	
  al	
  
Centro.	
  
El	
  tamaño	
  del	
  contenedor	
  lo	
  establecerá	
  el	
  
componente	
  central.	
  Las	
  cinco	
  posiciones	
  están	
  
indicadas	
  por	
  los	
  contenedores	
  de	
  la	
  clase:	
  
	
  
BorderLayout.NORTH	
  
BorderLayout.SOUTH	
  
BorderLayout.EAST	
  
BorderLayout.WEST	
  
BorderLayout.CENTER	
  
	
  
hay	
  aquí	
  un	
  ejemplo	
  del	
  uso	
  de	
  BorderLayout.	
  
He	
  cambiado	
  los	
  colores	
  de	
  fondo	
  de	
  las	
  
etiquetas	
  para	
  que	
  se	
  vea	
  el	
  componente	
  entero.	
  
	
  
import	
  java.awt.*;	
  
	
  
public	
  class	
  ContEBL	
  extends	
  Frame	
  
{	
  
	
  
Label	
  l1=new	
  Label("Etiqueta	
  al	
  
Norte",Label.CENTER);	
  
Label	
  l2=new	
  Label("Etiqueta	
  al	
  
Sur",Label.CENTER);	
  
Label	
  l3=new	
  Label("Etiqueta	
  al	
  
Este",Label.CENTER);	
  
Label	
  l4=new	
  Label("Etiqueta	
  al	
  
Oeste",Label.CENTER);	
  
Label	
  l5=new	
  Label("Etiqueta	
  al	
  
Centro",Label.CENTER);	
  
	
  
public	
  ContEBL()	
  
{	
  
//	
  uso	
  add	
  porque	
  el	
  Frame	
  es	
  una	
  extensión	
  de	
  
Window,	
  que	
  a	
  su	
  
//	
  vez	
  amplía	
  Container.	
  
 
l1.setBackground(Color.pink);	
  
l2.setBackground(Color.lightGray);	
  
l3.setBackground(Color.green);	
  
l4.setBackground(Color.yellow);	
  
l5.setBackground(Color.orange);	
  
	
  
	
  
setLayout(new	
  BorderLayout());	
  
	
  
add(l1,BorderLayout.NORTH);	
  
add(l2,BorderLayout.SOUTH);	
  
add(l3,BorderLayout.EAST);	
  
add(l4,BorderLayout.WEST);	
  
add(l5,BorderLayout.CENTER);	
  
	
  
pack();	
  
show();	
  
	
  
}	
  
	
  
public	
  static	
  void	
  main(String	
  []	
  arg)	
  
{	
  
	
  
new	
  ContEBL();	
  
	
  
}	
  
	
  
}	
  
 
El	
  resultado	
  es:	
  
	
  




                                                                 	
  
	
  
	
  
Hay	
  también	
  otros	
  gestores	
  de	
  Layout,	
  que	
  no	
  
analizaremos,	
  y	
  que,	
  sin	
  embargo,	
  podéis	
  
estudiar	
  junto	
  a	
  éstos	
  en	
  la	
  documentación	
  
oficial	
  de	
  las	
  Java	
  Development	
  Kit.	
  	
  
	
  
	
  

Contenu connexe

Tendances

Programando bajo el paradigma orientado a objetos, parte uno
Programando bajo el paradigma orientado a objetos, parte unoProgramando bajo el paradigma orientado a objetos, parte uno
Programando bajo el paradigma orientado a objetos, parte unoIng-D-SW-TorresKhano--ME
 
Tópicos avanzados de programación eventos
Tópicos  avanzados  de programación   eventosTópicos  avanzados  de programación   eventos
Tópicos avanzados de programación eventosKanddy Mobylml
 
inv unidad 1 topicos avanzados de programacion
inv unidad 1 topicos avanzados de programacioninv unidad 1 topicos avanzados de programacion
inv unidad 1 topicos avanzados de programacionAnel Sosa
 
Event Programing & Driven Mediator Pattern
Event Programing & Driven Mediator PatternEvent Programing & Driven Mediator Pattern
Event Programing & Driven Mediator Patternripoblet
 
Manejo de Eventos en java
Manejo de Eventos en javaManejo de Eventos en java
Manejo de Eventos en javaSilvana Vargas
 
Elaborada por monica
Elaborada por monicaElaborada por monica
Elaborada por monicanacihuillan
 
Elaborada por monica
Elaborada por monicaElaborada por monica
Elaborada por monicanacihuillan
 
manual-de-intouch
manual-de-intouchmanual-de-intouch
manual-de-intouchselcoltga
 
Trabajo de eventos de visual basic
Trabajo de eventos de visual basicTrabajo de eventos de visual basic
Trabajo de eventos de visual basicchocoeli
 
Elaborada por monica
Elaborada por monicaElaborada por monica
Elaborada por monicanacihuillan
 
Java Listeners
Java ListenersJava Listeners
Java ListenersMagikJames
 

Tendances (20)

Programando bajo el paradigma orientado a objetos, parte uno
Programando bajo el paradigma orientado a objetos, parte unoProgramando bajo el paradigma orientado a objetos, parte uno
Programando bajo el paradigma orientado a objetos, parte uno
 
Manual de aplicaciones en android
Manual de aplicaciones en androidManual de aplicaciones en android
Manual de aplicaciones en android
 
Tópicos avanzados de programación eventos
Tópicos  avanzados  de programación   eventosTópicos  avanzados  de programación   eventos
Tópicos avanzados de programación eventos
 
inv unidad 1 topicos avanzados de programacion
inv unidad 1 topicos avanzados de programacioninv unidad 1 topicos avanzados de programacion
inv unidad 1 topicos avanzados de programacion
 
Java event
Java eventJava event
Java event
 
Eventos, Topicos Avanzados de Programacion
Eventos, Topicos Avanzados de Programacion Eventos, Topicos Avanzados de Programacion
Eventos, Topicos Avanzados de Programacion
 
Event Programing & Driven Mediator Pattern
Event Programing & Driven Mediator PatternEvent Programing & Driven Mediator Pattern
Event Programing & Driven Mediator Pattern
 
Manejo de Eventos en java
Manejo de Eventos en javaManejo de Eventos en java
Manejo de Eventos en java
 
Auto play
Auto playAuto play
Auto play
 
6.eventos y swing
6.eventos y swing6.eventos y swing
6.eventos y swing
 
Elaborada por monica
Elaborada por monicaElaborada por monica
Elaborada por monica
 
Elaborada por monica
Elaborada por monicaElaborada por monica
Elaborada por monica
 
Eventos y listeners en Java Swing
Eventos y listeners en Java SwingEventos y listeners en Java Swing
Eventos y listeners en Java Swing
 
6.eventos y swing
6.eventos y swing6.eventos y swing
6.eventos y swing
 
Guia n1 tam 2009 1
Guia n1 tam 2009 1Guia n1 tam 2009 1
Guia n1 tam 2009 1
 
Prog gui
Prog guiProg gui
Prog gui
 
manual-de-intouch
manual-de-intouchmanual-de-intouch
manual-de-intouch
 
Trabajo de eventos de visual basic
Trabajo de eventos de visual basicTrabajo de eventos de visual basic
Trabajo de eventos de visual basic
 
Elaborada por monica
Elaborada por monicaElaborada por monica
Elaborada por monica
 
Java Listeners
Java ListenersJava Listeners
Java Listeners
 

En vedette

Cuestionario y universo
Cuestionario y universoCuestionario y universo
Cuestionario y universoGus Alvarez
 
Modulo Prevención de Infecciones Respiratorias
Modulo Prevención de Infecciones RespiratoriasModulo Prevención de Infecciones Respiratorias
Modulo Prevención de Infecciones RespiratoriasWebmasterSadi
 
áLbum de recuerdos 6ºa
áLbum de recuerdos 6ºaáLbum de recuerdos 6ºa
áLbum de recuerdos 6ºaBayo Alcaraz
 
Declaracion institucional pueblo saharaui
Declaracion institucional pueblo saharauiDeclaracion institucional pueblo saharaui
Declaracion institucional pueblo saharauiUPyD Parla
 
juegos y deportes alternativos
juegos y deportes alternativos juegos y deportes alternativos
juegos y deportes alternativos FALKO890317
 
Recetas de cremas y emparedados
Recetas de cremas y emparedadosRecetas de cremas y emparedados
Recetas de cremas y emparedadosChefLuisa
 
Lamisiondecada signo 1
Lamisiondecada signo 1Lamisiondecada signo 1
Lamisiondecada signo 1Thanya2011
 
Programa calculadora
Programa calculadoraPrograma calculadora
Programa calculadorajbersosa
 
Mediamorfosis1
Mediamorfosis1Mediamorfosis1
Mediamorfosis1docfuturox
 
Plantilla de plan_de_unidad nuestra
Plantilla de plan_de_unidad nuestraPlantilla de plan_de_unidad nuestra
Plantilla de plan_de_unidad nuestraanitaycesarito
 
La comunicación carolina escobar
La comunicación   carolina escobarLa comunicación   carolina escobar
La comunicación carolina escobarescobarendon123456
 
Uruguaii laura henao y luceriito palaciios 8-4
Uruguaii  laura henao y luceriito palaciios 8-4Uruguaii  laura henao y luceriito palaciios 8-4
Uruguaii laura henao y luceriito palaciios 8-4Laura Henao
 
Taller Bio-Informática Minería de datos
Taller Bio-Informática Minería de datosTaller Bio-Informática Minería de datos
Taller Bio-Informática Minería de datosJavier Gramajo López
 

En vedette (20)

Jose
JoseJose
Jose
 
Proyecto
ProyectoProyecto
Proyecto
 
Cuestionario y universo
Cuestionario y universoCuestionario y universo
Cuestionario y universo
 
Modulo Prevención de Infecciones Respiratorias
Modulo Prevención de Infecciones RespiratoriasModulo Prevención de Infecciones Respiratorias
Modulo Prevención de Infecciones Respiratorias
 
Unidad 5
Unidad 5Unidad 5
Unidad 5
 
áLbum de recuerdos 6ºa
áLbum de recuerdos 6ºaáLbum de recuerdos 6ºa
áLbum de recuerdos 6ºa
 
Declaracion institucional pueblo saharaui
Declaracion institucional pueblo saharauiDeclaracion institucional pueblo saharaui
Declaracion institucional pueblo saharaui
 
Sexualidad
SexualidadSexualidad
Sexualidad
 
Paleta de colores
Paleta de coloresPaleta de colores
Paleta de colores
 
juegos y deportes alternativos
juegos y deportes alternativos juegos y deportes alternativos
juegos y deportes alternativos
 
Recetas de cremas y emparedados
Recetas de cremas y emparedadosRecetas de cremas y emparedados
Recetas de cremas y emparedados
 
Lamisiondecada signo 1
Lamisiondecada signo 1Lamisiondecada signo 1
Lamisiondecada signo 1
 
Programa calculadora
Programa calculadoraPrograma calculadora
Programa calculadora
 
Mediamorfosis1
Mediamorfosis1Mediamorfosis1
Mediamorfosis1
 
Plantilla de plan_de_unidad nuestra
Plantilla de plan_de_unidad nuestraPlantilla de plan_de_unidad nuestra
Plantilla de plan_de_unidad nuestra
 
Jeison
JeisonJeison
Jeison
 
La comunicación carolina escobar
La comunicación   carolina escobarLa comunicación   carolina escobar
La comunicación carolina escobar
 
Medios de comunicación
Medios de comunicaciónMedios de comunicación
Medios de comunicación
 
Uruguaii laura henao y luceriito palaciios 8-4
Uruguaii  laura henao y luceriito palaciios 8-4Uruguaii  laura henao y luceriito palaciios 8-4
Uruguaii laura henao y luceriito palaciios 8-4
 
Taller Bio-Informática Minería de datos
Taller Bio-Informática Minería de datosTaller Bio-Informática Minería de datos
Taller Bio-Informática Minería de datos
 

Similaire à Java construye las interfaces gráficas del usuario mediante awt

Similaire à Java construye las interfaces gráficas del usuario mediante awt (20)

Clase event
Clase eventClase event
Clase event
 
Programa2
Programa2Programa2
Programa2
 
Programa 2
Programa 2Programa 2
Programa 2
 
Programa 2
Programa 2Programa 2
Programa 2
 
Programa 2
Programa 2Programa 2
Programa 2
 
Java GUI La librería Swing
Java GUI La librería Swing Java GUI La librería Swing
Java GUI La librería Swing
 
Informe de eventos topicos avanzados de programacion.
Informe de eventos topicos avanzados de programacion.Informe de eventos topicos avanzados de programacion.
Informe de eventos topicos avanzados de programacion.
 
2TAP Tema 1-Eventos.pptx
2TAP Tema 1-Eventos.pptx2TAP Tema 1-Eventos.pptx
2TAP Tema 1-Eventos.pptx
 
Programa2 eclipse
Programa2 eclipsePrograma2 eclipse
Programa2 eclipse
 
Programa 2
Programa 2Programa 2
Programa 2
 
Programa2
Programa2 Programa2
Programa2
 
03 interfaces gráficas awt
03   interfaces gráficas awt03   interfaces gráficas awt
03 interfaces gráficas awt
 
Programación i
Programación iProgramación i
Programación i
 
Eventos
EventosEventos
Eventos
 
Programando bajo paradigma poo, segunda parte
Programando bajo paradigma poo, segunda parteProgramando bajo paradigma poo, segunda parte
Programando bajo paradigma poo, segunda parte
 
Manual de android parte 1
Manual de android parte 1Manual de android parte 1
Manual de android parte 1
 
Loreidys gonzales fundamentos de visual basic
Loreidys gonzales fundamentos de visual basicLoreidys gonzales fundamentos de visual basic
Loreidys gonzales fundamentos de visual basic
 
6.eventos y swing
6.eventos y swing6.eventos y swing
6.eventos y swing
 
Trabajo
TrabajoTrabajo
Trabajo
 
Form y container
Form y containerForm y container
Form y container
 

Plus de jbersosa

Las excepciones standar
Las excepciones standarLas excepciones standar
Las excepciones standarjbersosa
 
Mas sobre excepciones
Mas sobre excepcionesMas sobre excepciones
Mas sobre excepcionesjbersosa
 
Estructuras de control try catch
Estructuras de control try catchEstructuras de control try catch
Estructuras de control try catchjbersosa
 
Clasen1java
Clasen1javaClasen1java
Clasen1javajbersosa
 
Programación java1
Programación java1Programación java1
Programación java1jbersosa
 
Tercercortesistop
TercercortesistopTercercortesistop
Tercercortesistopjbersosa
 
Encapsulacion
EncapsulacionEncapsulacion
Encapsulacionjbersosa
 
Administracion de la memoria principal
Administracion de  la memoria principalAdministracion de  la memoria principal
Administracion de la memoria principaljbersosa
 
Auditoria 2
Auditoria 2Auditoria 2
Auditoria 2jbersosa
 
Auditoriasistemasi 150703002656-lva1-app6891
Auditoriasistemasi 150703002656-lva1-app6891Auditoriasistemasi 150703002656-lva1-app6891
Auditoriasistemasi 150703002656-lva1-app6891jbersosa
 
Auditoria informatica
Auditoria informaticaAuditoria informatica
Auditoria informaticajbersosa
 
Auditoria de sistemas (1)
Auditoria de sistemas (1)Auditoria de sistemas (1)
Auditoria de sistemas (1)jbersosa
 
Auditoría de sistemas de información presentación
Auditoría de sistemas de información presentaciónAuditoría de sistemas de información presentación
Auditoría de sistemas de información presentaciónjbersosa
 
Realizar investigación y hacer un análisis por cada tema asignado al particip...
Realizar investigación y hacer un análisis por cada tema asignado al particip...Realizar investigación y hacer un análisis por cada tema asignado al particip...
Realizar investigación y hacer un análisis por cada tema asignado al particip...jbersosa
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativosjbersosa
 
Estructura de una red
Estructura de una redEstructura de una red
Estructura de una redjbersosa
 
Proyectodeprogramacinidesegundocorte2015 2
Proyectodeprogramacinidesegundocorte2015 2Proyectodeprogramacinidesegundocorte2015 2
Proyectodeprogramacinidesegundocorte2015 2jbersosa
 
Bases de datos mysql y repotes usando jasper report
Bases de datos mysql y repotes usando jasper reportBases de datos mysql y repotes usando jasper report
Bases de datos mysql y repotes usando jasper reportjbersosa
 

Plus de jbersosa (20)

Las excepciones standar
Las excepciones standarLas excepciones standar
Las excepciones standar
 
Mas sobre excepciones
Mas sobre excepcionesMas sobre excepciones
Mas sobre excepciones
 
Estructuras de control try catch
Estructuras de control try catchEstructuras de control try catch
Estructuras de control try catch
 
Main
MainMain
Main
 
Clasen1java
Clasen1javaClasen1java
Clasen1java
 
Programación java1
Programación java1Programación java1
Programación java1
 
Tercercortesistop
TercercortesistopTercercortesistop
Tercercortesistop
 
Encapsulacion
EncapsulacionEncapsulacion
Encapsulacion
 
Administracion de la memoria principal
Administracion de  la memoria principalAdministracion de  la memoria principal
Administracion de la memoria principal
 
Auditoria 2
Auditoria 2Auditoria 2
Auditoria 2
 
Auditoriasistemasi 150703002656-lva1-app6891
Auditoriasistemasi 150703002656-lva1-app6891Auditoriasistemasi 150703002656-lva1-app6891
Auditoriasistemasi 150703002656-lva1-app6891
 
Auditoria informatica
Auditoria informaticaAuditoria informatica
Auditoria informatica
 
Auditoria de sistemas (1)
Auditoria de sistemas (1)Auditoria de sistemas (1)
Auditoria de sistemas (1)
 
Auditoría de sistemas de información presentación
Auditoría de sistemas de información presentaciónAuditoría de sistemas de información presentación
Auditoría de sistemas de información presentación
 
Realizar investigación y hacer un análisis por cada tema asignado al particip...
Realizar investigación y hacer un análisis por cada tema asignado al particip...Realizar investigación y hacer un análisis por cada tema asignado al particip...
Realizar investigación y hacer un análisis por cada tema asignado al particip...
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Php
PhpPhp
Php
 
Estructura de una red
Estructura de una redEstructura de una red
Estructura de una red
 
Proyectodeprogramacinidesegundocorte2015 2
Proyectodeprogramacinidesegundocorte2015 2Proyectodeprogramacinidesegundocorte2015 2
Proyectodeprogramacinidesegundocorte2015 2
 
Bases de datos mysql y repotes usando jasper report
Bases de datos mysql y repotes usando jasper reportBases de datos mysql y repotes usando jasper report
Bases de datos mysql y repotes usando jasper report
 

Dernier

Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfFichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfssuser50d1252
 
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024gharce
 
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docxMagalyDacostaPea
 
HISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICAHISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICAJesus Gonzalez Losada
 
LOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejorLOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejormrcrmnrojasgarcia
 
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2Eliseo Delgado
 
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJODIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJOLeninCariMogrovejo
 
Actividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 EducacionActividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 Educacionviviantorres91
 
ENSEÑAR ACUIDAR EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.
ENSEÑAR ACUIDAR  EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.ENSEÑAR ACUIDAR  EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.
ENSEÑAR ACUIDAR EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.karlazoegarciagarcia
 
Presentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptxPresentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptxRosabel UA
 
Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024Rosabel UA
 
Si cuidamos el mundo, tendremos un mundo mejor.
Si cuidamos el mundo, tendremos un mundo mejor.Si cuidamos el mundo, tendremos un mundo mejor.
Si cuidamos el mundo, tendremos un mundo mejor.monthuerta17
 
libro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguajelibro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguajeKattyMoran3
 
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)jlorentemartos
 
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdfPRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdfGabrieldeJesusLopezG
 

Dernier (20)

Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfFichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
 
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
 
¿Amor o egoísmo? Esa es la cuestión.pptx
¿Amor o egoísmo? Esa es la cuestión.pptx¿Amor o egoísmo? Esa es la cuestión.pptx
¿Amor o egoísmo? Esa es la cuestión.pptx
 
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docx
 
HISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICAHISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICA
 
LOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejorLOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejor
 
El Bullying.
El Bullying.El Bullying.
El Bullying.
 
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
 
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJODIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
 
Actividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 EducacionActividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 Educacion
 
ENSEÑAR ACUIDAR EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.
ENSEÑAR ACUIDAR  EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.ENSEÑAR ACUIDAR  EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.
ENSEÑAR ACUIDAR EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.
 
Presentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptxPresentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptx
 
Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024
 
Si cuidamos el mundo, tendremos un mundo mejor.
Si cuidamos el mundo, tendremos un mundo mejor.Si cuidamos el mundo, tendremos un mundo mejor.
Si cuidamos el mundo, tendremos un mundo mejor.
 
libro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguajelibro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguaje
 
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
 
Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
Sesión ¿Amor o egoísmo? Esa es la cuestión
Sesión  ¿Amor o egoísmo? Esa es la cuestiónSesión  ¿Amor o egoísmo? Esa es la cuestión
Sesión ¿Amor o egoísmo? Esa es la cuestión
 
Unidad 2 | Teorías de la Comunicación | MCDIU
Unidad 2 | Teorías de la Comunicación | MCDIUUnidad 2 | Teorías de la Comunicación | MCDIU
Unidad 2 | Teorías de la Comunicación | MCDIU
 
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdfPRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
 

Java construye las interfaces gráficas del usuario mediante awt

  • 1. PRACTICA   UN   EJERCICIO   PARA   UILIZAR   LA   INTERFASE  GRAFICA       JAVA   construye   las   interfaces   gráficas   del   usuario   mediante   AWT.   Para   crear   una   interfaz   gráfica  de  usuario  hace  falta  un  contenedor  que   es   la   ventana   donde   se   situarán   los   componentes   (como   botones,   cajas   de   texto,   etiquetas,  entre  otros)  y  donde  se  realizarán  los   dibujos.   Lo   podemos   relacionar   con   los   formularios,   los   componentes   como   tal   y   el   modelo  de  eventos,  que  son  las  respuestas  a  las   acciones   como   presionar   un   botón   o   hacer   un   click   de   ratón.   Cuando   el   usuario   realiza   una   determinada   acción,   se   produce   el   evento   correspondiente   que   el   SO   transmite   al   AWT,   este   crea   un   objeto   de   una   determinada   clase   de   evento   derivada   de   AWTEvent   y   el   evento   es   trasmitido   a   un   determinado   método   (procedimiento   o   función   de   la   clase)   para   que   lo   gestione.   El   componente   u   objeto   que   recibe   el   evento   debe   indicar   previamente   que   objeto   se  va  a  hacer  cargo  de  gestionar  el  evento.   El  modelo  de  eventos  de  JAVA    Está  basado  en  que  los  objetos  sobre  los  que  se   producen   los   eventos   o   event   sources   registran   los  objetos  que  los  gestionarán  (event  listener),   para   lo   cual   los   event   listener   habrán   de  
  • 2. disponer   de   los   métodos   adecuados.   Esos   métodos   se   llamarán   automáticamente   cuando   se   produzca   el   evento,   la   forma   de   garantizar   que   los   event   listener   disponen   de   los   métodos   apropidos   para   gestionar   los   eventos   es   obligarles   a   implementar   una   determinada   interface   Listener,   estas   interfaces   se   corresponden  con  los  tipo  oris  de  eventos  que  se   pueden  producir.   Proceso   para   crear   una   aplicación   interactiva   orientada   a   eventos   con   interfase   gráfica   de   usuario.   Determinar   los   componentes   que   van   a   constituir  la  interfase  de  usuario,  como  botones,   cajas  de  texto,  menús,  etc.   Crear  una  clase  para  la  aplicaci;on  que  contenga   la  función  main().   Crear   una   clase   Ventana,   sub   clase   de   Frame,   que  corresponda  al  evento  WindowClosing().   La   función   main()   deberá   crear   un   objeto   de   la   clase   ventana   para   colocar   los   componentes   y   mostrarla   por   pantalla   con   el   tamaño   y   la   posición  adecuados.   Añadir  al  objeto  Ventana  todos  los  componentes   y  menús  que  deba  contener.    Se  puede  hacer  un   constructor  de  la  Ventana  o  en  el  propio  método   main().  
  • 3. Definir   los   objetos   listener   (aquellos   que   respondan   a   eventos   cuyas   clases   implementarán  las  distintas  interfases  Listener  )   para   cada   uno   de   los   eventos   que   deban   estar   soportados.  En  aplicaciones  pequeñas,  el  propio   objeto  ventana  se  puede  ocupar  de  responder  a   los   eventos   de   sus   componentes.   En   programas   mas   grandes   se   puede   crear   uno   o   mas   objetos   de   clases   especiales   para   ocuparse   de   los   eventos.   Finalmente,   se   deben   implementar   los   métodos   de   las   interfases   listener   que   se   vayan   a   hacer   cargo  de  la  gestión  de  los  eventos.     Como  ejemplo  vamos  a  realizar  un  programa  en   JAVA   que   sirva   de   juego   para,   en   una   ventana   contenedora   de   botones   amarillos   y   rojos,   al   clickear  sobre  uno  de  ellos  aparezca  el  color  del   botón  seleccionado.   En   NetBeans   vamos   a   abrir   un   proyecto   identificándolo  con  el  nombre  Juego  y  lo  vamos   a   colocar   en   el   escritorio.   A   la   carpeta   SRC   le   vamos   a   añadir   dos   clases   adicionales   a   la   principal.  Una  clase  se  va  a  llamar  Botonera  y  la   otra  OyenteAcciones.   Vamos  a  importar  las  siguientes  librerías   Javax.swing.*  
  • 4. Java.awt.*   Java.awt.event.*     La   clase   Botonera   la   vamos   a   llenar   de   botones   amarillos   y   rojos.   Esta   clase   va   a   heredar   los   atributos   y   métodos   de   la   clase   JPanel   (por   lo   que   hay   que   colocar   que   la   clase   Botonera   extends    JPanel.  Podemos  entonces  declarar     Public   Botonera   (int   tamaño)   {     para   colocar   JButton   [][]   botones:   y   así   crear   una   matriz   de   botones,   se   instancia   botones   con   new   JButton   [tamaño][tamaño].   Se   crea   un   oyente   de   acciones   para   los   eventos   con   la   otra   clase   que   creamos  en  el  proyecto,  OyenteAcciones  oyente   =  new  OyenteAcciones(this):.  Con  un  doble  ciclo   se  crean  los  objetos  botones     For  (int  i=0;i<botones.length;i++){     For  (int  j=0;j<botones[i].length;i++){   Dentro  del  doble  ciclo  codificamos   botones[i][j]=new  JButton();   botones[i][j].setPreferredSize(newDimension(5 0,50));   if  ((i+j+1)%2==0)  {   botones[i][j].setBackground(Color.BLACK);  }  
  • 5. De   esta   manera   coloreamos   los   botones   en   negro   de   manera   intercalada   con   el   color   por   defecto,  que  sería  el  blanco.   Fuera  del  doble  ciclo  codificamos   setLayout(new  GridLayout  (tamano,tamano));   En   java,   cuando   hacemos   ventanas,   la   clase   que   decide   cómo   se   reparten   los   botones   (Y   demás   controles)  dentro  de  la  ventana  se  llama  Layout.   Esta   clase   es   la   que   decide   en   qué   posición   van   los   botones   y   demás   componentes,   si   van   alineados,   en   forma   de   matriz,   cuáles   se   hacen   grandes   al   agrandar   la   ventana,   etc.   Otra   cosa   importante  que  decide  el  Layout  es  qué  tamaño   es   el   ideal   para   la   ventana   en   función   de   los   componentes  que  lleva  dentro.   Con   un  layout  adecuado,   el   método  pack()  de   la   ventana  hará  que  coja  el  tamaño  necesario  para   que  se  vea  todo  lo  que  tiene  dentro.   Este   pone   los   componentes   en   forma   de   matriz   (cuadrícula),  estirándolos  para  que  tengan  todos   el   mismo   tamaño.   El  GridLayout  es   adecuado   para   hacer   tableros,   calculadoras   en   que   todos   los  botones  son  iguales,  etc.   //   Creación   de   los   botones   JButton   boton[]   =   new   JButton[9];   for   (int   i=0;i<9;i++)         boton[i]   =   new  JButton(Integer.toString(i));    //  Colocación   en   el   contenedor   contenedor.setLayout   (new  
  • 6. GridLayout   (3,3));     //   3   filas   y   3   columnas   for   (int   i=0;i<9;i++)           contenedor.add   (boton[i]);     //  Añade  los  botones  de  1  en  1.     Terminamos  la  clase  con   private  Dimension  newDimension(int  i,  int  i0)  {   return  null;            }   Aquí   creamos   una   Dimension   cuya   anchura   y   altura   son   las   que   se   especifican   en   los   argumentos.   En   la   clase   OyenteAcciones   implementamos   un   oidor,   ya   que   tenemos   el   evento   que   va   a   activar   a  una  caja  de  mensajes  para  indicar  el  color  del   botón.   public   class   OyenteAcciones   implements   ActionListener  {            private  JPanel  panel;            public  OyenteAcciones(JPanel  panel){                    this.panel=panel;            }          public  void  actionPerformed(ActionEvent   evento)  {    
  • 7.                JButton  boton=(JButton)   evento.getSource();                    String  color="BLANCO";                    if  (boton.getBackground()==Color.BLACK)                            color="NEGRO";                    JOptionPane.showMessageDialog(panel,                    "Se  ha  pulsado  un  boton  de  color  "+  color,                    "Boton  Pulsado",                    JOptionPane.INFORMATION_MESSAGE);            }   }     Por  último,  en  el  main  java  creamos  la  botonera   y  ps  colocamos  en  la  ventana  contenedora     public  static  void  main(String[]  args)  {                  JFrame  ventana=new  JFrame("BOTONERA");                    Botonera  botonera  =  new  Botonera(18);    
  • 8.                ventana.add(botonera);                    ventana.pack();                    ventana.setVisible(true);  }         -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐     Contenedores  y  gestión  de  los   layout   En  la  lección  anterior  hemos  visto  como   introducir  en  nuestras  aplicaciones  y  en   nuestros  apliques  unas  etiquetas  y  unos   botones.  Para  hacerlo  hemos  utilizado  unos   contenedores  y  unos  layout  sin  saber  cómo   funcionaban.  En  este  lección  analizeremos  sus   funcionamientos  y  cómo  aprovecharlos  para   mejorar  nuestras  interfaces.   Empezamos  con  describir  la  clase  Container  del   paquete  java.awt.  Es  una  extensión  de  la  clase   Component  de  la  que  proceden  todos  los   componentes  GUI  y,  en  realidad,  éste  mismo  es   un  componente  GUI.    
  • 9.       Un  Container  es  un  contenedor  para  los  objetos   GUI  y,  por  lo  tanto,  también  para  los  demás   container.  Se  utiliza  junto  a  un  Layout  Manager  y   permite  que  abarquen  más  de  un  GUI  (y   Contenedores),  permitiendo  que  aparezcan   varios  objetos  en  nuestras  interfaces.  Vemos  qué   contiene  la  clase.   Container()  ,  es  el  único  constructor  de  la  clase.     Unos  métodos:  Component  add(Component   comp),  añade  el  componente  al  final  del   contenedor.   Component  add(Component  comp,  int  index),   añade  el  componente  en  la  posición  indicada  por   el  contenedor.   void  add(Component  comp,  Object  constraints)  e   void  add(Component  comp,  Object  constraints,  int   index)  ,  como  antes,  lo  único  es  que  especifica   unas  constantes  para  el  componente  que  se  ha   introducido.   Component  add(String  name,  Component  comp),   añade  al  contenedor  el  componente  y  le  da  un   nombre.  
  • 10. void  addContainerListener(ContainerListener  l),   ajusta  el  ContainerListener  que  escuchará  los   sucesos  que  han  ocurrido  en  el  contenedor.   void  doLayout(),  provoca  la  disposición  de  los   componentes  en  el  contenedor.   Component  findComponentAt(int  x,  int  y),   devuelve  el  componente  que  se  encuentra  en  la   posición  especificada  del  contenedor  (posición   gráfica).   Component  findComponentAt(Point  p)  ,  devuelve   el  componente  que  se  encuentra  en  la  posición   especificada  del  contenedor  (posición  gráfica).   float  getAlignmentX(),  devuelve  el  ajuste  de   líneas  a  lo  largo  del  eje  X  del  contenedor.     float  getAlignmentY(),  devuelve  el  ajuste  de   líneas  a  lo  largo  del  eje  Y  del  contenedor.   Component  getComponent(int  n),  devuelve  el   enésimo  componente  introducido  en  el   contenedor.   Component  getComponentAt(int  x,  int  y),   devuelve  el  componente  que  se  encuentra  en  la   posición  especificada  del  contenedor  (posición   gráfica).     Component  getComponentAt(Point  p),  devuelve   el  componente  que  se  encuentra  en  la  posición   especificada  del  contenedor  (posición  gráfica).   int  getComponentCount()  ,  da  el  número  de   componentes  introducidos  en  el  contenedor.    
  • 11. Component[]  getComponents(),  da  todos  los   componentes  introducidos  en  el  contenedor.   Insets  getInsets(),  da  un  objeto  Insets  para  el   contenedor.  Este  objeto  representa  el  tamaño   (gráfico=  del  contenedor.   LayoutManager  getLayout(),  devuelve  el   LayuotManager  asociado  al  contenedor.   EventListener[]  getListeners(Class  listenerType),   devuelve  todos  los  oyentes  de  sucesos  al   contenedor.     Dimension  getMaximumSize(),  devuelve  el   tamaño  máximo  que  puede  tener  el  contenedor.     Dimension  getMinimumSize(),  devuelve  el   tamaño  mínimo  que  puede  tener  el  contenedor.     Dimension  getPreferredSize(),  devuelve  el   tamaño  preferido  por  el  contenedor.   void  list(PrintStream  out,  int  indent),  imprime  el   listado  de  los  componentes  introducidos  en  el   contenedor,  sobre  un  stream  de  output.     void  list(PrintWriter  out,  int  indent),  imprime  en   una  impresora  los  componentes  introducidos  en   el  contenedor.   void  paint(Graphics  g),  dibuja  el  contenedor.  La   paint  es  una  función  muy  importante.  Veremos   cómo  definirla  para  dibujar  en  una  ventana.   void  paintComponents(Graphics  g).  dibuja  todos   los  componentes  del  contenedor.   void  print(Graphics  g),  imprime  el  contenedor   (el  aspecto  gráfico).  
  • 12. void  printComponents(Graphics  g),  imprime   todos  los  componentes  introducidos  en  el   contenedor  (sus  aspectos  gráficos).   void  remove(Component  comp),  elimina  el   componente  especificado  por  el  contenedor.   void  remove(int  index),  aparta  el  componente   que  se  encuentra  en  la  posición  especificada  en   el  contenedor.   void  removeAll(),  aparta  todos  los  componentes   introducidos  en  el  contenedor.   void  removeContainerListener(ContainerListener   l),  elimina  el  oyente  de  sucesos  para  containers   de  este  container.   void  setFont(Font  f),  ajusta  las  Font  utilizadas   por  el  texto  en  el  contenedor.   void  setLayout(LayoutManager  mgr),  asocia  al   contenedor  un  gestor  de  layout.   void  update(Graphics  g),  vuelve  a  dibujar  el   contenedor.   void  validate(),  anula  el  contenedor  y  sus   componentes.     Introduciendo  componentes  en  el  contenedor,   como  en  el  ejemplo  sucesivo,  nos  damos  cuenta   de  que  sólo  el  último  será  visualizado.  Esto   ocurre  porque  no  hemos  dado  gestor  de  Layout.   En  el  caso  de  applet,  en  cambio,  el   LayoutManager  de  default  es  el  FlowLayout.    
  • 13. import  java.awt.*;     public  class  Contenedor  extends  Frame   {     Label  l1=new  Label("Etiqueta1");   Label  l2=new  Label("Etiqueta2");   Label  l3=new  Label("Etiqueta3");   Label  l4=new  Label("Etiqueta4");   Label  l5=new  Label("Etiqueta5");     public  Contenedor()   {   //  uso  add,  porque  el  Frame  es  una  extensión  de   Window,  que  a  su   //  vez  amplía  Container.     add(l1);   add(l2);   add(l3);   add(l4);   add(l5);   doLayout();   pack();   show();   }     public  static  void  main(String  []  arg)   {  
  • 14.   new  Contenedor();     }     }     Por  lo  tanto,  vemos  cómo  introducir  un  gestor   de  Layout  en  el  contenedor.  El  método  de  la   clase  container  que  lo  permite  es  void   setLayout(LayoutManager  mgr).  No  nos  queda   que  ver  cómo  es  el  objeto  de  tipo   LayoutManager.   LayoutManager  es  una  interfaz.  De  las  clases   que  la  implementan  analizaremos  GridLayout,   FlowLayout.   Hay  otra  interfaz  llamada  LayoutManager2,  que   amplía  ésta  y  que  tiene  otras  clases  que  la   implementan.  De  éstas  veremos:  CardLayout,   BorderLayout,  GridBagLayout,  BoxLayout,   OverlayLayout.   Por  lo  tanto,  en  el  método  setLayout  (…)   podemos  utilizar  como  parámetro  un  objeto  de   estas  clases.   Llegados  a  este  punto,  tenemos  que  comprender   qué  diferencia  hay  entre  los  layout  manager.   El  FlowLayout  deja  colocar  los  componentes  de   un  contenedor  de  la  izquierda  hacia  la  derecha  
  • 15. en  una  sóla  línea.           Para  utilizar  el  LayoutManager  FlowLayout  del   ejemplo  precedente  basta  con  invocar  el  método   setLayout  con  parámetro  new  FlowLayout(),  y   después  los  componentes  se  introducen   automáticamente,  de  la  add  de  la  derecha  hacia   la  izquierda  en  la  misma  línea.     import  java.awt.*;     public  class  ContEFL  extends  Frame   {     Label  l1=new  Label("Etiqueta1");   Label  l2=new  Label("Etiqueta2");   Label  l3=new  Label("Etiqueta3");   Label  l4=new  Label("Etiqueta4");   Label  l5=new  Label("Etiqueta5");     public  ContEFL()  
  • 16. {   //  uso  add,  porque  el  Frame  es  una  extensión  de   Window,  que  a  su   //  vez  amplía  Container.     setLayout(new  FlowLayout());     add(l1);   add(l2);   add(l3);   add(l4);   add(l5);     pack();   show();     }     public  static  void  main(String  []  arg)   {     new  ContEFL();     }     }     La  ventana  que  sale  es:    
  • 17.       El  GridLayout  permite  colocar  los  componentes   en  un  contenedor  como  si  se  dispusieran  en  una   plantilla.           Todos  los  componentes  tendrán  el  mismo   tamaño.  La  clase  tiene  tres  constructores,  uno   sin  parámetros  que  crea  una  planilla  con  1  línea,   prácticamente  un  FlowLayout,  y  otros  dos  que   permiten  especificar  el  tamaño  de  la  planilla.   El  ejemplo  anterior  cambia  de  esta  forma:     import  java.awt.*;  
  • 18.   public  class  ContEGL  extends  Frame   {     Label  l1=new  Label("Etiqueta1");   Label  l2=new  Label("Etiqueta2");   Label  l3=new  Label("Etiqueta3");   Label  l4=new  Label("Etiqueta4");   Label  l5=new  Label("Etiqueta5");     public  ContEGL()   {   //  uso  add,  poruqe  el  Frame  es  una  extensión  de   Window,  que  a  su   //  vez  amplía  Container.     setLayout(new  GridLayout(2,3));     add(l1);   add(l2);   add(l3);   add(l4);   add(l5);     pack();   show();     }    
  • 19. public  static  void  main(String  []  arg)   {     new  ContEGL();     }     }     La  ventana  es  la  siguiente:           El  LayoutManager  CardLayout  permite   visualizar  los  componentes  diferentes  en  plazos   de  tiempo  diferentes,  es  decir,  que  visualiza  sólo   un  componente  a  la  vez.  Sin  embargo  el   componete  visualizado  se  puede  cambiar.   Hay  aquí  un  ejemplo  del  uso  de  CardLayout     import  java.awt.*;   import  java.awt.event.*;     public  class  ContECL  extends  Frame   {  
  • 20.   Label  l1=new  Label("Etiqueta1");   Label  l2=new  Label("Etiqueta2");   Label  l3=new  Label("Etiqueta3");   Label  l4=new  Label("Etiqueta4");   Label  l5=new  Label("Etiqueta5");     Panel  p=new  Panel(new  GridLayout(2,1));   CardLayout  CL=new  CardLayout(14,14);   Panel  p1=new  Panel(CL);   Panel  NPB=new  Panel(new  FlowLayout());     public  ContECL()   {         p.add(NPB);   p.add(p1);     Button  N=new  Button("Próximo");   Button  P=new  Button("Anterior");     NPB.add(P);   NPB.add(N);     P.addActionListener(new  ActionListener()   {   public  void  actionPerformed(ActionEvent  e)  
  • 21. {   CL.previous(p1);   }   }   );     N.addActionListener(new  ActionListener()   {   public  void  actionPerformed(ActionEvent  e)   {   CL.next(p1);   }   }   );     p1.add("uno",l1);   p1.add("dos",l2);   p1.add("tres",l3);   p1.add("cuatro",l4);   p1.add("cinco",l5);     add(p);   pack();   show();     }     public  static  void  main(String  []  arg)   {  
  • 22.   new  ContECL();     }     }     El  resultado  de  los  ejemplos  son  las  siguientes   ventanas:                
  • 23.       Muestran  como  las  cinco  etiquetas  aparecen  en   la  misma  posición  en  plazos  de  tiempo   diferentes.   Notad  que  en  el  ejemplo  no  se  han  utilizado  los   demás  gestores  de  Layout  para  que  se  puedan   introducir  los  botones  Próximo  y  Anterior.     BorderLayout  es  uno  de  los  gestores  de  Layout   más  utilizados.  Permite  introducir  en  un   contenedor  cinco  componentes,  uno  al  Norte,   uno  al  Sur,  uno  al  Este,  uno  al  Oeste  y  otro  al   Centro.   El  tamaño  del  contenedor  lo  establecerá  el   componente  central.  Las  cinco  posiciones  están   indicadas  por  los  contenedores  de  la  clase:     BorderLayout.NORTH   BorderLayout.SOUTH  
  • 24. BorderLayout.EAST   BorderLayout.WEST   BorderLayout.CENTER     hay  aquí  un  ejemplo  del  uso  de  BorderLayout.   He  cambiado  los  colores  de  fondo  de  las   etiquetas  para  que  se  vea  el  componente  entero.     import  java.awt.*;     public  class  ContEBL  extends  Frame   {     Label  l1=new  Label("Etiqueta  al   Norte",Label.CENTER);   Label  l2=new  Label("Etiqueta  al   Sur",Label.CENTER);   Label  l3=new  Label("Etiqueta  al   Este",Label.CENTER);   Label  l4=new  Label("Etiqueta  al   Oeste",Label.CENTER);   Label  l5=new  Label("Etiqueta  al   Centro",Label.CENTER);     public  ContEBL()   {   //  uso  add  porque  el  Frame  es  una  extensión  de   Window,  que  a  su   //  vez  amplía  Container.  
  • 25.   l1.setBackground(Color.pink);   l2.setBackground(Color.lightGray);   l3.setBackground(Color.green);   l4.setBackground(Color.yellow);   l5.setBackground(Color.orange);       setLayout(new  BorderLayout());     add(l1,BorderLayout.NORTH);   add(l2,BorderLayout.SOUTH);   add(l3,BorderLayout.EAST);   add(l4,BorderLayout.WEST);   add(l5,BorderLayout.CENTER);     pack();   show();     }     public  static  void  main(String  []  arg)   {     new  ContEBL();     }     }  
  • 26.   El  resultado  es:           Hay  también  otros  gestores  de  Layout,  que  no   analizaremos,  y  que,  sin  embargo,  podéis   estudiar  junto  a  éstos  en  la  documentación   oficial  de  las  Java  Development  Kit.