
Posicion JFrame en pantalla
Publicado por Octavio (74 intervenciones) el 25/11/2009 09:56:49
He creado un codigo que realiza un movimiento suave y continuo de una ventana desde un punto de la pantalla a otro y con determinado retrazo de tiempo el codigo funciona de forma perfecta, pero resulta que cuando se ejecuta se llega a ver cuando la ventana aparece en pantalla y luego comienza el movimiento...
Bueno escribiendo esto se me ocurrio la solucion y posicionar la ventana en un inicio fuera de la pantalla (simple) de esta forma:
java.awt.Dimension pantallaTamano = Toolkit.getDefaultToolkit().getScreenSize();
//con alto y ancho ubicamos la ventana al centro de la pantalla
int ancho = ((pantallaTamano.width/2)-(this.getWidth()/2));
int alto = (pantallaTamano.height/2)-(this.getHeight()/2);
//no se usa alto para poder ubicar la ventana fuera de la pantalla por eso el -1 a continuacion:
this.setLocation(ancho, pantallaTamano.height-1);
BUENO EL COD PARA REALIZAR EL MOVIMIENTO ES EL SIGUIENTE:
/**
*
* @author Octavio Lanzone - Del Campillo - Córdoba - Argentina
* MSN: octicoco@hot... MAIL: octicoco@gma...
*/
import javax.swing.JFrame;
public class moverAutomaticamenteVentana {
/**
* Realiza un movimiento de una ventana por la pantalla
* @param ventana: ventana que se desea mover
* @param desdeX: punto de inicio del movimieto (ubicacion) horizontal
* @param hastaX: punto de fin del movimiento (ubicacion) horizontal
* @param desdeY: punto de inicio del movimieto (ubicacion) vertical
* @param hastaY: punto de fin del movimiento (ubicacion) vertical
* @param demora: demora entre un movimiento y otro (debe ser en milisegundos, 10 esta bien)
Se puede refinar el codigo usando puntos en lugar de enteros... pero se los dejo Uds.
*/
public moverAutomaticamenteVentana(JFrame ventana, int desdeX, int hastaX, int desdeY, int hastaY, int demora){
System.out.println(" desdeX "+desdeX+" hastaX "+hastaX+" desdeY "+desdeY+" hastaY "+hastaY);
ventana.show();
while ((desdeX != hastaX) || (desdeY != hastaY)){
//Movimiento vertical
if (desdeY != hastaY){
try {
Thread.sleep(demora/2);
} catch(Exception e){
e.printStackTrace();
}
if (desdeY < hastaY){
desdeY++;
} else if (desdeY != hastaY){
desdeY--;
}
ventana.setLocation(desdeX, desdeY);
}
//Movimiento horizontal
if (desdeX != hastaX){
try {
Thread.sleep(demora/2);
} catch(Exception e){
e.printStackTrace();
}
if (desdeX < hastaX){
desdeX++;
} else if (desdeX != hastaX){
desdeX--;
}
ventana.setLocation(desdeX, desdeY);
}
}
}
}
Bueno escribiendo esto se me ocurrio la solucion y posicionar la ventana en un inicio fuera de la pantalla (simple) de esta forma:
java.awt.Dimension pantallaTamano = Toolkit.getDefaultToolkit().getScreenSize();
//con alto y ancho ubicamos la ventana al centro de la pantalla
int ancho = ((pantallaTamano.width/2)-(this.getWidth()/2));
int alto = (pantallaTamano.height/2)-(this.getHeight()/2);
//no se usa alto para poder ubicar la ventana fuera de la pantalla por eso el -1 a continuacion:
this.setLocation(ancho, pantallaTamano.height-1);
BUENO EL COD PARA REALIZAR EL MOVIMIENTO ES EL SIGUIENTE:
/**
*
* @author Octavio Lanzone - Del Campillo - Córdoba - Argentina
* MSN: octicoco@hot... MAIL: octicoco@gma...
*/
import javax.swing.JFrame;
public class moverAutomaticamenteVentana {
/**
* Realiza un movimiento de una ventana por la pantalla
* @param ventana: ventana que se desea mover
* @param desdeX: punto de inicio del movimieto (ubicacion) horizontal
* @param hastaX: punto de fin del movimiento (ubicacion) horizontal
* @param desdeY: punto de inicio del movimieto (ubicacion) vertical
* @param hastaY: punto de fin del movimiento (ubicacion) vertical
* @param demora: demora entre un movimiento y otro (debe ser en milisegundos, 10 esta bien)
Se puede refinar el codigo usando puntos en lugar de enteros... pero se los dejo Uds.
*/
public moverAutomaticamenteVentana(JFrame ventana, int desdeX, int hastaX, int desdeY, int hastaY, int demora){
System.out.println(" desdeX "+desdeX+" hastaX "+hastaX+" desdeY "+desdeY+" hastaY "+hastaY);
ventana.show();
while ((desdeX != hastaX) || (desdeY != hastaY)){
//Movimiento vertical
if (desdeY != hastaY){
try {
Thread.sleep(demora/2);
} catch(Exception e){
e.printStackTrace();
}
if (desdeY < hastaY){
desdeY++;
} else if (desdeY != hastaY){
desdeY--;
}
ventana.setLocation(desdeX, desdeY);
}
//Movimiento horizontal
if (desdeX != hastaX){
try {
Thread.sleep(demora/2);
} catch(Exception e){
e.printStackTrace();
}
if (desdeX < hastaX){
desdeX++;
} else if (desdeX != hastaX){
desdeX--;
}
ventana.setLocation(desdeX, desdeY);
}
}
}
}
Valora esta pregunta


0