public class Ventana extends JFrame {
private int posX;
private int posY;
private int maxX;
private int maxY;
private JLabel lbPosicion;
public Ventana( ) {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300,300);
setLocationRelativeTo(null);
setVisible(true);
setLayout(new FlowLayout());
maxX = Toolkit.getDefaultToolkit().getScreenSize().width - 300;
maxY = Toolkit.getDefaultToolkit().getScreenSize().height - 300;
posX = getLocationOnScreen().x;
posY = getLocationOnScreen().y;
lbPosicion = new JLabel(String.format("Pos X: %d , Pos Y: %d", posX, posY));
getContentPane().add(lbPosicion);
Mover mover = new Mover(this);
mover.execute();
}
private class Mover extends SwingWorker {
private JFrame ventana;
private int pasosX;
private int centroY;
private int centroX;
public Mover(JFrame ventana) {
this.ventana = ventana;
centroX = posX;
centroY = posY;
pasosX = posX / posY;
}
@Override
protected Object doInBackground() throws Exception {
irSuperiorIzquierda();
irCentro();
irSuperiorIzquierda();
irCentro();
irInferiorIzquierda();
irCentro();
irInferiorDerecha();
irCentro();
return null;
}
private void irSuperiorIzquierda() throws InterruptedException {
while (posX > 0 || posY > 0) {
if (posX > 0)
posX-=pasosX;
if (posY > 0)
posY--;
ventana.setLocation(posX, posY);
lbPosicion.setText(String.format("Pos X: %d , Pos Y: %d", posX, posY));
Thread.sleep(10);
}
}
private void irCentro() throws InterruptedException {
if (posX < centroX) {
if (posY < centroY)
while (posX < centroX || posY < centroY) {
if (posX < centroX)
posX += pasosX;
if (posY < centroY)
posY++;
ventana.setLocation(posX, posY);
lbPosicion.setText(String.format("Pos X: %d , Pos Y: %d", posX, posY));
Thread.sleep(10);
}
else
while (posX < centroX || posY > centroY) {
if (posX < centroX)
posX += pasosX;
if (posY > centroY)
posY--;
ventana.setLocation(posX, posY);
lbPosicion.setText(String.format("Pos X: %d , Pos Y: %d", posX, posY));
Thread.sleep(10);
}
}
else {
if (posY < centroY)
while (posX > centroX || posY < centroY) {
if (posX > centroX)
posX -= pasosX;
if (posY < centroY)
posY++;
ventana.setLocation(posX, posY);
lbPosicion.setText(String.format("Pos X: %d , Pos Y: %d", posX, posY));
Thread.sleep(10);
}
else
while (posX > centroX || posY > centroY) {
if (posX > centroX)
posX -= pasosX;
if (posY > centroY)
posY--;
ventana.setLocation(posX, posY);
lbPosicion.setText(String.format("Pos X: %d , Pos Y: %d", posX, posY));
Thread.sleep(10);
}
}
}
private void irInferiorIzquierda() throws InterruptedException {
while (posX > 0 || posY < maxY) {
if (posX > 0)
posX-=pasosX;
if (posY < maxY)
posY++;
ventana.setLocation(posX, posY);
lbPosicion.setText(String.format("Pos X: %d , Pos Y: %d", posX, posY));
Thread.sleep(10);
}
}
private void irInferiorDerecha() throws InterruptedException {
while (posX < maxX || posY < maxY) {
if (posX < maxX)
posX+=pasosX;
if (posY < maxY)
posY++;
ventana.setLocation(posX, posY);
lbPosicion.setText(String.format("Pos X: %d , Pos Y: %d", posX, posY));
Thread.sleep(10);
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Ventana();
}
});
}
}