sábado, 9 de octubre de 2010

Apariencia de un JFrame

La problemática no es crear un JFrame, ya que cualquier programador sabe crear una clase que herede de JFrame. El problema es que la nueva ventana tenga la apariencia deseada. Así que en el siguiente ejemplo se recogen unas cuantas líneas de código típicas a la hora de cambiar el aspecto que tiene por defecto un JFrame:


public class MainFrame extends JFrame {

MainFrame(){
this.setTitle("Mi ventana Java");

//Fija el tamaño de la ventana
this.setSize(300,300);

//Cambia el icono de la taza de café
this.setIconImage(new ImageIcon("mi_imagen.png").getImage());

//Hace que la ventana no se pueda redimensionar
this.setResizable(false);

//Hace que la ventana aparezca centrada en la pantalla
this.setLocationRelativeTo(null);

}
}


Otras opciones que pueden resultar interesantes

Dimensionar la ventana al tamaño de la pantalla:
Hacer que la ventana tenga el mismo tamaño que la pantalla en la que va a aparecer:

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
this.setSize(screenSize);


Maximizar la ventana:
Es decir que la ventana aparezca de entrada ya maximizada en la pantalla.

this.setExtendedState(JFrame.MAXIMIZED_BOTH);


Quitar el marco de la ventana:
Quita el marco en el que aparece el título de la ventana y los botones de minimizar, maximizar y cerrar la ventana:

this.setUndecorated(true);

Ajustar la ventana:
Hacer que toda la jerarquía de componentes contenidos en la ventana, se vaya ajustando a sus respectivos tamaños, partiendo del tamaño de la ventana. (Produce una serie de llamadas en cascada al método pack de cada componente contenido en la ventana). Este método siempre debe ser el último en ser llamado en el constructor del JFrame personalizado que se esté creando.

this.pack();


Mostrar el JFrame
Finalmente para que el JFrame sea visible, hay que invocar el método setVisible. Una buena práctica es invocar este método en la línea de código siguiente a la instanciación del objeto derivado de JFrame. De esta forma se evitan posibles errores lógicos en el constructor de la clase implementada, ya que algunas llamadas a determinados métodos no tienen efecto una vez que la ventana es visible. En el siguiente ejemplo se ha creado una clase llamada StartPoint que será el punto de comienzo de la aplicación.

public class StartPoint {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
MainFrame mf = new MainFrame();
mf.setVisible(true);
}
});
}
}

No hay comentarios:

Publicar un comentario