Seguimos con el archivo que creamos en el post anterior CreandoMarcos, al ejecutar la ventana aparece en algún lugar de la pantalla, en mi caso aparece en la esquina superior izquierda:
Si no le indicamos donde
queremos que aparezca la ventana se mostrará en alguna ubicación diferente
dependiendo de la resolución de los monitores.
Para colocar la ventana en algún punto en concreto de la pantalla se utiliza el método setLocation con unos parámetros x e y donde se posiciona el marco. Imaginaros la gráfica siguiente:
Donde aparece la ventana por defecto en nuestro monitor en el eje de
coordenadas es 0,0, si queremos que aparezca en el centro, tendríamos que
poner, por ejemplo, un 500 en el parámetro x.
class miMarco extends JFrame {
public miMarco() {
setSize(500,
300);
setLocation(500, 200);
}
}
Si ejecutamos la aplicación, en mi caso, el marco aparece casi en medio,
depende también de los monitores.
El método setSize y el método setLocation los podemos sustituir por
el método setBounds que nos permite
colocar la ventana y darle un tamaño, tenemos que pasarle cuatro parámetros,
las variables x e y que es la ubicación y los otros dos parámetros es el
tamaño:
class miMarco extends JFrame {
public miMarco() {
//setSize(500,
300);
//setLocation(500,
200);
setBounds(500, 200, 500, 300);
}
}
Cuando aparece la ventana y nos colocamos sobre una
esquina la podemos redimensionar, para impedir que podamos redimensionar
utilizamos el método SetResizable y le pasamos un parámetro de tipo boolean como false:
class miMarco extends JFrame {
public miMarco() {
//setSize(500,
300);
//setLocation(500,
200);
setBounds(500,
200, 500, 300);
setResizable(false);
}
}
Si queremos que nos aparezca la ventana en pantalla
completa utilizamos el método setExtendedState y le pasamos
una constante de clase que viene incluida en este método:
class miMarco extends JFrame {
public miMarco() {
//setSize(500,
300);
//setLocation(500, 200);
setBounds(500,
200, 500, 300);
setResizable(false);
setExtendedState(JFrame.MAXIMIZED_BOTH);
}
}
Es recomendable que conforme vayamos conociendo
métodos los vayamos viendo en la API de Java para ver su uso. Por ejemplo, el método setExtendedState tiene
varias constantes de clase, por ejemplo, para ver la ventana normal se
utilizaría de la siguiente forma:
setExtendedState(JFrame.NORMAL);
Para que aparezca un título en la barra de título
utilizamos el método setTitle.
class miMarco extends JFrame {
public miMarco() {
//setSize(500,
300);
//setLocation(500,
200);
setBounds(500,
200, 500, 300);
//setResizable(false);
//setExtendedState(JFrame.MAXIMIZED_BOTH);
setTitle("Mi primer marco");
}
}
Siguiendo con el ejemplo queremos colocar la ventana justo en el
centro de la pantalla, para ello hemos de conocer la resolución de la misma
donde se está ejecutando la aplicación, debemos utilizar la clase Toolkit que es un almacén de multitud
de método que se comunican con el sistema huésped de ventanas. Esta clase tiene
dos métodos:
·
getDefaultToolkit()
·
getScreenSize()
Vamos a verlo mediante un ejemplo, creamos una nueva clase con el
método main al que vamos a llamar CreandoMarcoCentrado.
package swing;
public class
CreandoMarcoCentrado {
public static void main(String[] args) {
}
}
A continuación, nos creamos otra clase que se va a encargar de que
el marco aparezca centrado, vamos a llamarla MarcoCentrado que va a heredar de la clase JFrame, dentro de esta clase creamos el constructor:
class MarcoCentrado
extends JFrame {
public MarcoCentrado()
{
}
}
Tenemos que detectar la resolución de nuestra pantalla y esto lo
hacemos con el método getDefaultToolkit,
este método nos permite saber el sistema nativo de las ventanas de la pantalla
del PC. Para utilizarlo se usa un objeto de tipo Toolkit.
public MarcoCentrado()
{
Toolkit
mipantalla = Toolkit.getDefaultToolkit();
}
Tenemos que averiguar la resolución o tamaño de la ventana, esto
lo hacemos con el método getScreenSize().
Si vais a la API de Java para conocer un poco más el uso de este método,
utiliza un objeto de tipo Dimension
que a la misma vez es una clase. Por lo que lo crearíamos de la siguiente
forma:
public MarcoCentrado()
{
Toolkit
mipantalla = Toolkit.getDefaultToolkit();
Dimension tamanopantalla = mipantalla.getScreenSize();
}
En tamanopantalla hemos
almacenado la resolución de la pantalla y necesitamos obtener el ancho y alto
de la pantalla, para ello necesitamos utilizar dos campos de clase
pertenecientes a la clase Dimension
que son width y heigth, por lo que hacemos lo siguiente:
public MarcoCentrado()
{
Toolkit
mipantalla = Toolkit.getDefaultToolkit();
Dimension
tamanopantalla = mipantalla.getScreenSize();
int alturapantalla = tamanopantalla.height;
int anchurapantalla = tamanopantalla.width;
}
Vamos a crear un marco con unas dimensiones correspondientes a la
mitad de la pantalla en cuanto a ancho y la mitad en cuanto a altura.
public MarcoCentrado()
{
Toolkit
mipantalla = Toolkit.getDefaultToolkit();
Dimension
tamanopantalla = mipantalla.getScreenSize();
int alturapantalla = tamanopantalla.height;
int anchurapantalla = tamanopantalla.width;
setSize(anchurapantalla/2,
alturapantalla/2);
setLocation(anchurapantalla/4,
alturapantalla/4);
}
Utilizamos setSize para
dividir tanto la anchura como la altura entre dos, por la mitad y para colocar
la ventana en el centro utilizamos setLocation
dividido entre cuatro.
Para probar la aplicación nos creamos un objeto de la clase MarcoCentrado en el método main:
public static void main(String[] args) {
MarcoCentrado
mimarco = new
MarcoCentrado();
mimarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mimarco.setVisible(true);
}
Si probamos vemos que la ventana nos aparece justo en medio de la
pantalla.
Podemos añadir un título a la ventana con el método setTittle y añadir un icono en la ventana, por defecto, aparece un icono:
Para insertar un icono en la ventana se utiliza el método getImage. Todo esto lo hacemos dentro
del constructor de la clase MarcoCentrado:
setTitle("Mi marco
centrado");
Image
miIcon = mipantalla.getImage("src/swing/icono.png");
setIconImage(miIcon);
Probamos:
4.1 INTRODUCCIÓN A LAS APLICACIONES SWING << >> 4.3 ESCRIBIENDO EN EL FRAME
No hay comentarios:
Publicar un comentario