Seguidores

MIS WEBS



martes, 20 de marzo de 2018

LAYOUT LIBRE EN JAVA


        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.

No hay comentarios:

Publicar un comentario

Buscar este blog

Sandisk y Western Digital