Hola Jabatos:
Un JFrame es una ventana que contiene otros componentes java. Podríamos definir el JFrame como el contenedor superior, la ventana "física" sobre la que se construyen el resto de componentes.
El JFrame tiene múltiples formas de configurarse. No obstante, vamos a comentar aquí un formato concreto de configuración, que es el que suelo emplear en mis aplicaciones. Veamos el código:
public class MainWindow {
public MainWindow() {
}
public JFrame makeWindow(int width, int height, int positionX, int positionY, String title,
JPanel north, JPanel east, JPanel west, JPanel center, JPanel south ) {
JFrame window=new JFrame();
Dimension dim=new Dimension();
dim.setSize(width, height);
window.setMinimumSize(dim);
window.setPreferredSize(dim);
window.setMaximumSize(dim);
window.setLocation(positionY, positionX);
BorderLayout bl=new BorderLayout();
window.setLayout(bl);
window.add(north, BorderLayout.NORTH);
window.add(east, BorderLayout.EAST);
window.add(west, BorderLayout.WEST);
window.add(center, BorderLayout.CENTER);
window.add(south, BorderLayout.SOUTH);
window.setResizable(false);
window.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
window.setTitle(title);
window.setVisible(true);
return window;
} // end of method makeWindow
} // end of class
Esta clase estará declarada en la carpeta views. El método makeWindow implementa un JFrame con una serie de parámetros configurables que paso a explicar a continuación.
Por un lado vamos a utilizar setMinimumSize, setPreferredSize y setMaximumSize para lograr que nuestro JFrame tenga siempre el tamaño asignado por los parámetros width y height.
SetLocation sirve para que nuestro JFrame sea creado en un lugar concreto de la pantalla. En mi opinión es mejor asignar el lugar de aparición en la pantalla de la aplicación.
La asignación de Layouts se emplea para disponer, de manera rápida y práctica, una serie de elementos dentro de un componente. El problema es que todos los componentes incluidos dentro del layout funcionarán más o menos igual en lo que respecta a tamaño, orientación, fonts, etc.
En un JFrame, aparte del complicado GridBagLayout, el layout a mi juicio más interesante es el BorderLayout. Este layout da prioridad al centro (BorderLayout.Center), y nos permite tener alrededor de éste un margen superior, inferior, izquierda y derecha. Introduciendo JPanels dentro de cada layout, podremos organizar de manera sencilla y eficiente una pantalla de aplicación. Lo veremos más adelante.
SetResizable(False) evita que nuestro JFrame pueda ser ampliado por encima del tamaño asignado. Si el tamaño crece los componentes se reorganizan en el nuevo espacio; normalmente esto producirá resultados catastróficos desde el punto de vista visual. Si nosotros le hemos asignado un tamaño y hemos creado unos componentes ajustados a éste ¿Cual es la utilidad de cambiar el tamaño de la estructura? Yo creo que ninguna...
SetDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE) deshabilita la posibilidad de cerrar el JFrame pulsando en el icono X de cerrar aplicación. ¿Porqué hacemos esto? Pues porque queremos tener control sobre el cierre de nuestra aplicación. Deberemos implementar un botón de cierre que nos permita una salida "controlada" de la aplicación, guardando variables de entorno o de sistema, cerrando ficheros abiertos, etc.
Pues con esto tenemos rápidamente un JFrame controlado y ajustable a nuestra necesidades.
No hay comentarios:
Publicar un comentario