COMO Y PARA QUE SE USAN LOS LAYOUT LIBRES
l
setLayout (null) Utilizando esta instrucción nos liberamos de los layouts y tenemos que indicar objeto por objeto las coordenadas donde se colocaran utilizando el método setBounds.
Ejm.
class LaminaMuelle extends JPanel{
public LaminaMuelle(){
BOTON3= new JButton ("muelle 3");
setLayout(null);
BOTON3.setBounds(100,100,50,50);
add(BOTON3);
}
JButton BOTON1;
}
Está pensada para crear nosotros
mismos una clase con nuestro diseño (layout)
y reutilizarlo para nuestras aplicaciones, así no dependemos de las creadas por
defecto.
Dicha clase tendrá que implementar la interface LayoutManager hecho que nos obligara a sobrescribir
todos sus métodos:
- addLayoutComponent(String nombre,Component objeto)
- minimumLayoutSize(Container padre)
- LayoutContainer(Container padre)
- preferredLayoutSize(Contaner padre)
- removeLayoutComponent(Component componente)
El constructor nos pide un objeto
de la clase Container y esta clase tiene dos métodos que son muy útiles:
- getComponentCount(): Como su nombre dice cuenta la cantidad de objetos que hemos adjuntado a nuestro contenedor.
- getComponent(int nºComponente): Nos regresa el componente que le indiquemos por parámetros. Tenemos que tener en cuenta que al final estamos tirando de una matriz por lo que siempre le tenemos que restar uno al deseado. Si getComponentCount() nos regresará 20 y nostros deseáramos el último elemento. Tendríamos que expresarlo así.
getComponent(19);
Ejercicio. Voy a crear mi layout con el diseño de un formulario que podré guardar como un objeto y utilizarlo para construir un formulario cuando quiera.
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager;
import javax.swing.*;
public class PracticaSrpingLayout {
public static void main (String[] args) {
MarcoPracticaSrpingLayout xyy = new MarcoPracticaSrpingLayout();
xyy.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
xyy.setVisible(true);
xyy.add(xyy);
}
}
class MarcoPracticaSrpingLayout extends JFrame{
public MarcoPracticaSrpingLayout() {
setBounds(700,200,500,350);
formulario lam = new formulario();
lam.setVisible(true);
add(lam);
}
class formulario extends JPanel{
public formulario(){
setLayout(new DiseñoFormulario1());
//cargamos las etiquetas en un
array
arayÑabel = new JLabel[] {JL1 = new JLabel("NOMBRE"),JL2 = new JLabel("APELLIDOS"),JL3 = new JLabel("DNI"),JL4 = new JLabel("CORREO @ ELECTRONICO")};
//cargamos los texfiled en un
array
arrayTexFile = new JTextField[] {JTF1 = new JTextField (""),JTF2 = new JTextField (""),JTF3 = new JTextField (""),JTF4 = new JTextField ("")};
//utilizamos un for each para ajuntar
a la lámina
int n=0;
for (JLabel i:arayÑabel) {
add(arayÑabel[n]);
add(arrayTexFile[n]);
n++;
}
}
JLabel JL1,JL2,JL3,JL4,arayÑabel[];
JTextField JTF1,JTF2,JTF3,JTF4, arrayTexFile[];
}
}
class DiseñoFormulario1 implements LayoutManager{
public void addLayoutComponent(String arg0, Component arg1) {}
public void layoutContainer(Container Contenedor) {
//distribuimos
las etiquegas y los campos de texto
int contador=0;
//obtener recuento componentes
int num = Contenedor.getComponentCount();
for(int i=0;i< num;i++) {
contador++;
Component c = Contenedor.getComponent(i);
c.setBounds(x, y, 200, 20);
x+=200;
if (contador%2==0) {
x=20;
y+=40;
}
}
}
public Dimension minimumLayoutSize(Container parent) {return null;}
public Dimension preferredLayoutSize(Container parent) {return null;}
public void removeLayoutComponent(Component comp) {}
private int x = 30;
private int y = 30;
}
Espero que os guste, muchas gracias a todos/as.
Espero que os guste, muchas gracias a todos/as.
No hay comentarios:
Publicar un comentario