Para evitar el repetitivo trabajo de diseño de formulario nos planteamos crear una clase del tipo JPanel que pudise recibir un vector de componentes. El panel se encarga de organizar los componentes de la forma adecuada.
Para tratar los componentes hemos creado tres clases, que heredan de una clase abstracta (ComponenteDin); estas clases encapsulan los componentes gráficos JLabel, JTextField y JComboBox. La forma de crear el vector de componentes es sencilla:
//// Creamos componentes de texto, indicando valor, titulo, tamaño del componente y alineamiento //// El tamaño se puede especificar como Dimension (pixels) o como columnas (caracteres) ComponenteDin.ANCHURA_ETIQUETA = 70; componentes.add( new ComponenteDinTXT( "Lopez Quesada", "Apellidos", new Dimension( 160, 20)) ); componentes.add( new ComponenteDinTXT( "Pedro", "Nombre", new Dimension( 100, 20)) ); componentes.add( new ComponenteDinTXT( "34", "Edad", 2 ) ); // Columnas componentes.add( new ComponenteDinTXT( "V", "Sexo") ); //// Alineado a la derecha componentes.add( new ComponenteDinTXT( "2000", "Crédito", new Dimension( 90, 20), false ) ); //// Creamos componente combobox, antes creamos el vector de items Vector oficinas = new Vector(); oficinas.add( "Madrid"); oficinas.add( "Bilbao"); oficinas.add( "Barcelona"); componentes.add( new ComponenteDinCBB( "Bilbao", oficinas, "Oficina", new Dimension( 120, 20)) ); //// Creamos componente para etiqueta con color rojo ComponenteDin c = new ComponenteDinLBL( "En baja laboral" ); c.getComponenteGrafico().setForeground( Color.RED); componentes.add( c ); //// Creamos el panel, mandandole vector de componentes, tamaño y titulo panel = new PanelForm( componentes, getSize(), "Ficha personal"); //// Configuro el botón panel.configBoton( "Guardar", "GGG", new Dimension(90,24), new listener_botonAceptar(this)); //// Inicio de presentación panel.iniciar(); contRaiz.add( panel, BorderLayout.CENTER );
De esta forma nos olvidamos del trabajo sucio del formulario y nos centramos en la información que deseamos presentar. Existen prolongaciones interesantes para este caso; por ejemplo, hacer que la definición de los componentes derive de un archivo XML.
Código fuente