Organizadores Personalizados con Swing
-
Upload
augusto-galicia-lopez -
Category
Documents
-
view
219 -
download
0
Transcript of Organizadores Personalizados con Swing
-
8/9/2019 Organizadores Personalizados con Swing
1/19
Organizadores personalizados
1
Resumen: En este trabajo se presenta la secuenciaindicada por el tutorial de Swing (Sun Microsytems)
para crear organizadores propios al implementar lainterface LayoutManager. Tambin se incluye una
pequea adaptacin al ejemplo de claseDiagonalLayout de la misma fuente para organizarcomponentes de forma diagonal en la pantalla.
OrganizadoresPersonalizados con Swing
Augusto Galicia Lpez
-
8/9/2019 Organizadores Personalizados con Swing
2/19
Tarea 1: Organizadores personalizados
ndice de contenidoGeneralidades. ........................................................................... 3Tarea. ........................................................................................ 3
Secuencia para la creacin de un organizador propio. .............. 3Cdigo generado. ...................................................................... 4
Referencias. ............................................................................... 5
2
-
8/9/2019 Organizadores Personalizados con Swing
3/19
Organizadores personalizados
Generalidades.Un manejador de organizacin es un objeto que implementa la interfaz LayoutManager y
determina el tamao y la posicin de los componentes dentro de un contenedor.
Tarea.
Construya un organizador propio. Explique los pasos que sigui y enve el cdigo
generado.
Secuencia para la creacin de un organizador propio.
1.- Crear una clase que implemente la interfaz LayoutManager o implementarla
directamente. Tambin se puede implementar su subinterfaz LayoutManager2.
2.- La clase o clases creadas conforme al punto anterior, deben implementar al menos
los siguientes cinco mtodos, los cuales son requeridos por la interfaz LayoutManager:
void addLayoutComponent(String, Component)
void removeLayoutComponent(Component)
Dimension preferredLayoutSize(Container)
Dimension minimumLayoutSize(Container)
void layoutContainer(Container)
3.- Adems de implementar los cinco mtodos precedentes los organizadores
generalmente implementan, al menos, un constructor pblico y el mtodo toString().
4.-Si desea que su organizador maneje restricciones (constraints) de los componentes,
como tamaos mximos o alineamiento, entonces deber implementarse a la interfaz
LayoutManager2. De hecho, por estas razones entre muchas otras, casi todos los
3
-
8/9/2019 Organizadores Personalizados con Swing
4/19
Tarea 1: Organizadores personalizados
organizadores modernos necesitan implementar dicha interfaz, la cul requiere otros
cinco mtodos a los requeridos por LayoutManager, que son los siguientes:
addLayoutComponent(Component, Object)
getLayoutAlignmentX(Container)
getLayoutAlignmentY(Container)
invalidateLayout(Container)
maximumLayoutSize(Container)
De estos cinco mtodos, los ms importante son: addLayoutComponent(Component,
Object) e invalidateLayout(Container).
5.- Finalmente, el organizador deber mantener referencias a instancias de la clase
Component que no sean hijas de la clase Container.
Cdigo generado.
En los dos archivos java, colocados al final de este documento (AugustoLayout.java y
DemoDeAugustoLayout.java), los cuales son adaptaciones de los archivos que propone
el tutorial de Java para el paquete Swing,se observa la secuencia anterior. Las
adaptaciones consisten en la traduccin y adecuacin del cdigo original, adems de la
cancelacin de algunas lneas de cdigo que resultaron innecesarias para la
implementacin de tal organizador. Las adaptaciones y adecuaciones se pueden notar
al observar los tamaos de archivo, como se muestra en las dos imgenes siguientes:
4
-
8/9/2019 Organizadores Personalizados con Swing
5/19
Organizadores personalizados
La pantalla generada por el cdigo del archivo DemoDeAugustoLayout.java es la
siguiente:
5
-
8/9/2019 Organizadores Personalizados con Swing
6/19
Tarea 1: Organizadores personalizados
Referencias.
http://java.sun.com/docs/books/tutorial/uiswing/layout/custom.html
6
http://java.sun.com/docs/books/tutorial/uiswing/layout/custom.htmlhttp://java.sun.com/docs/books/tutorial/uiswing/layout/custom.html -
8/9/2019 Organizadores Personalizados con Swing
7/19
Organizadores personalizados
AugustoLayout.java
/*
* Este cdigo est basado en el tutorial de Java, por eso
* al final se incluye el aviso de copyright de Sun Microsystems
* su aplicacin se muestra en el archivo DemoDeAugustoLayout.java
*/
import java.awt.*;
public class AugustoLayout implements LayoutManager
{
private int espacioVertical;
private int AnchoMinimo = 0, AltoMinimo = 0;
private int anchoPreferido = 0, altoPreferido = 0;
private boolean tamDesconocido = true;
int entrada=5;
public AugustoLayout(int entrada)
{
this.entrada=entrada;
}
public AugustoLayout()
{ espacioVertical = entrada;
}
7
-
8/9/2019 Organizadores Personalizados con Swing
8/19
Tarea 1: Organizadores personalizados
/* No hace nada, pero la requiere LayoutManager. */
public void addLayoutComponent(String name, Component comp)
{
}
/* No hace nada, pero la requiere LayoutManager. */
public void removeLayoutComponent(Component comp)
{
}
//Este mtodo establece el tamao del contenedor
private void FijarTamano(Container padre)
{
int numComponentes = padre.getComponentCount();
Dimension d = null;
//Restablecer alto y ancho minimos y preferidos.
anchoPreferido = 0;
altoPreferido = 0;
AnchoMinimo = 0;
AltoMinimo = 0;
for (int i = 0; i < numComponentes; i++)
{
Component componente = padre.getComponent(i);
8
-
8/9/2019 Organizadores Personalizados con Swing
9/19
Organizadores personalizados
if (componente.isVisible()) {
d = componente.getPreferredSize();
if (i > 0)
{
anchoPreferido += d.width/2;
altoPreferido += espacioVertical;
}
else
{
anchoPreferido = d.width;
}
altoPreferido += d.height;
AnchoMinimo =
Math.max(componente.getMinimumSize().width,AnchoMinimo);
AltoMinimo = altoPreferido;
}
}
}//Fin del mtodo FijarTamano().
9
-
8/9/2019 Organizadores Personalizados con Swing
10/19
Tarea 1: Organizadores personalizados
/* Requerido por LayoutManager. */
public Dimension preferredLayoutSize(Container padre)
{
Dimension dimension= new Dimension(10, 10);
int numComponentes = padre.getComponentCount();
FijarTamano(padre);
//Se agregan las especificaciones preferidas del contenedor
Insets especificaciones = padre.getInsets();
dimension.width = anchoPreferido + especificaciones.left + especificaciones.right;
dimension.height = altoPreferido + especificaciones.top + especificaciones.bottom;
tamDesconocido = false;
return dimension;
}
/* Required by LayoutManager. */
public Dimension minimumLayoutSize(Container padre)
{
10
-
8/9/2019 Organizadores Personalizados con Swing
11/19
Organizadores personalizados
Dimension dimension = new Dimension(0, 0);
int numComponentes = padre.getComponentCount();
//Se agregan las especificaciones minimas del contenedor
Insets especificaciones = padre.getInsets();
dimension.width = AnchoMinimo + especificaciones.left + especificaciones.right;
dimension.height = AltoMinimo + especificaciones.top + especificaciones.bottom;
tamDesconocido = false;
return dimension;
}
/* Requerido por LayoutManager. */
/*
* Este mtodo establece el tamao del contenedor en la primera vez
* que se despliega.
*/
public void layoutContainer(Container padre)
{
Insets especificaciones = padre.getInsets();
11
-
8/9/2019 Organizadores Personalizados con Swing
12/19
Tarea 1: Organizadores personalizados
int maxWidth = padre.getWidth() - (especificaciones.left + especificaciones.right);
int maxHeight = padre.getHeight() - (especificaciones.top +
especificaciones.bottom);
int numComponentes = padre.getComponentCount();
int Anchoprevio = 0, Altoprevio = 0;
int x = 0, y = especificaciones.top;
int xAjuste = 0, yAjuste = 0;
boolean unaColumna = false;
// Se establecen las especificaciones en caso de que no haya minimos o preferidos.
if (tamDesconocido)
{
FijarTamano(padre);
}
if (maxWidth
-
8/9/2019 Organizadores Personalizados con Swing
13/19
Organizadores personalizados
{
xAjuste = (maxWidth - anchoPreferido)/(numComponentes - 1);
}
if (maxHeight > altoPreferido)
{
yAjuste = (maxHeight - altoPreferido)/(numComponentes -1);
}
for (int i = 0 ; i < numComponentes ; i++)
{
Component componente = padre.getComponent(i);
if (componente.isVisible())
{
Dimension dimComponente = componente.getPreferredSize();
// Si se cambia el tamao de la ventana, se incrementan x e y.
if (i > 0)
{
if (!unaColumna)
{
13
-
8/9/2019 Organizadores Personalizados con Swing
14/19
Tarea 1: Organizadores personalizados
x += Anchoprevio/2 + xAjuste;
}
y += Altoprevio + espacioVertical + yAjuste;
}
// En caso de que x sea muy grande,
if ((!unaColumna) && (x + dimComponente.width) > (padre.getWidth() -
especificaciones.right))
{
// Se reduce x a nmero razonable.
x = padre.getWidth() - especificaciones.bottom -
dimComponente.width;
}
// Establece la posicin y el tamao de los componentes.
componente.setBounds(x, y, dimComponente.width, dimComponente.height);
Anchoprevio = dimComponente.width;
Altoprevio = dimComponente.height;
}
14
-
8/9/2019 Organizadores Personalizados con Swing
15/19
Organizadores personalizados
}
}
}
/*
* Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* - Neither the name of Sun Microsystems nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
15
-
8/9/2019 Organizadores Personalizados con Swing
16/19
Tarea 1: Organizadores personalizados
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
DemoDeAugustoLayout.java
/*
* Este Demo requiere a la clase AugustoLayout
* como est adaptado de los tutoriales de Java
* al final se incluye el aviso de copyright de Sun Microsystems
*/
import java.awt.Container;
import javax.swing.*;
public class DemoDeAugustoLayout
{
public static void AgregarComponentes (Container contenedor)
{
contenedor.setLayout(new AugustoLayout());
contenedor.add(new JLabel("Etiqueta 1"));
contenedor.add(new JLabel("Etiqueta 2"));
contenedor.add(new JButton("Botn 1"));
16
-
8/9/2019 Organizadores Personalizados con Swing
17/19
Organizadores personalizados
contenedor.add(new JButton("Button 2"));
contenedor.add(new JButton("Button 3"));
contenedor.add(new JTextField("textField"));
contenedor.add(new JLabel("Etiqueta 3"));
}
private static void MuestraVentana()
{
//Crea la ventana como un nuevo objeto JFrame.
JFrame Ventana = new JFrame("Demo de AugustoLayout");
Ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Establece el contenedor.
AgregarComponentes(Ventana.getContentPane());
//Muestra la ventana.
Ventana.pack();
Ventana.setVisible(true);
}
17
-
8/9/2019 Organizadores Personalizados con Swing
18/19
Tarea 1: Organizadores personalizados
public static void main(String[] args)
{
//establece un hilo para el despachador de eventos de Thread:
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
MuestraVentana();
}
});
}
}
/*
* Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above copyright
18
-
8/9/2019 Organizadores Personalizados con Swing
19/19
Organizadores personalizados
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* - Neither the name of Sun Microsystems nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
19