import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* Location è una classe che dà la possibilità di posizionare un
* JFrame relativamente ad un altro oggetto: allo schermo, ad un altro JFrame,
* oppure relativamente al mouse.
*
* Esempio di sorgente che utilizza questa classe
* -------------------------
* import java.awt.*;
* import java.awt.event.*;
* import javax.swing.*;
*
* public class Main extends JFrame implements MouseListener {
* private JFrame jf;
*
* public Main() {
* this.setSize(300, 300);
* this.setLocation(10, 10);
* this.addMouseListener(this);
*
* jf = new JFrame("OK");
* jf.setSize(130, 130);
*
* this.setVisible(true);
* }
*
* public void mousePressed(MouseEvent e) {}
* public void mouseReleased(MouseEvent e) {}
* public void mouseClicked(MouseEvent e) {
* Location.setLocation_RelativeMouse(jf, e, Location.LOCATION_RIGHT_DOWN, 0, 0);
* jf.setVisible(true);
* }
* public void mouseEntered(MouseEvent e) {}
* public void mouseExited(MouseEvent e) {}
*
* public static void main (String args[]) {
* Main m = new Main();
* }
* }
* -------------------------
*
* @date 08.08.2006
* @author Nophiq
*/
public class Location {
public static final short LOCATION_RIGHT_DOWN = 20;
public static final short LOCATION_LEFT_DOWN = 21;
public static final short LOCATION_RIGHT_UP = 22;
public static final short LOCATION_LEFT_UP = 23;
public static final short LOCATION_CENTER = 24;
/**
* Posiziona il JFrame relativamente al JFrame di riferimento ed in base al positionPolicy
* passatogli come parametro
*
* @param
* jfBase JFrame da posizionare relativamente a jfRelative
* jfRelative JFrame di riferimento
* positionPolicy può assumere i seguenti valori:
* <ul>
* <li> LOCATION_RIGHT_DOWN - per posizionare l'angolo in basso
* a destra del jfBase con quello di jfRelative</li>
* <li> LOCATION_LEFT_DOWN - per posizionare l'angolo in basso
* a sinistra del jfBase con quello di jfRelative</li>
* <li> LOCATION_RIGHT_UP - per posizionare l'angolo in alto
* a destra del jfBase con quello di jfRelative</li>
* <li> LOCATION_LEFT_UP - per posizionare l'angolo in alto
* a sinistra del jfBase con quello di jfRelative</li>
* <li> LOCATION_CENTER - per posizionare jfBase al centro di
* jfRelative. Nota: i margin sono automaticamente settati
* a 0 se usate questo policy</li>
* </ul>
* marginX è la lunghezza che distanzia i due angoli
* marginY è l'altezza che distanzia i due angoli
*/
public static void setLocation_RelativeJFrame
(JFrame jfBase,
JFrame jfRelative,
short positionPolicy,
int marginX,
int marginY
) {
switch (positionPolicy) {
case LOCATION_RIGHT_DOWN: {jfBase.setLocation(jfRelative.getX()+marginX, jfRelative.getY()+marginY); break;}
case LOCATION_LEFT_DOWN: {jfBase.setLocation(jfRelative.getX()+jfRelative.getWidth()-jfBase.getWidth()+marginX, jfRelative.getY()+marginY); break;}
case LOCATION_RIGHT_UP: {jfBase.setLocation(jfRelative.getX()+marginX, jfRelative.getY()+jfRelative.getHeight()-jfBase.getHeight()+marginY); break;}
case LOCATION_LEFT_UP: {jfBase.setLocation(jfRelative.getX()+jfRelative.getWidth()-jfBase.getWidth()+marginX, jfRelative.getY()+jfRelative.getHeight()-jfBase.getHeight()+marginY); break;}
case LOCATION_CENTER: {jfBase.setLocation(jfRelative.getX()+jfRelative.getWidth()/2-jfBase.getWidth()/2, jfRelative.getY()+jfRelative.getHeight()/2-jfBase.getHeight()/2); break;}
}
}
/**
* Posiziona il JFrame relativamente allo schermo in base al positionPolicy
* passatogli come parametro
*
* @param
* jfBase JFrame da posizionare relativamente allo schermo ed
* al valore di positionPolicy.
* positionPolicy può assumere i seguenti valori:
* <ul>
* <li> LOCATION_RIGHT_DOWN - per posizionare l'angolo in basso
* a destra del JFrame con quello dello schermo</li>
* <li> LOCATION_LEFT_DOWN - per posizionare l'angolo in basso
* a sinistra del JFrame con quello dello schermo</li>
* <li> LOCATION_RIGHT_UP - per posizionare l'angolo in alto
* a destra del JFrame con quello dello schermo</li>
* <li> LOCATION_LEFT_UP - per posizionare l'angolo in alto
* a sinistra del JFrame con quello dello schermo</li>
* <li> LOCATION_CENTER - per posizionare il JFrame al centro
* dello schermo</li>
* </ul>
* marginX è la lunghezza che distanzia i due angoli
* marginY è l'altezza che distanzia i due angoli
*/
public static void setLocation_RelativeScreen
(JFrame jfBase,
short positionPolicy,
int marginX,
int marginY
) {
switch (positionPolicy) {
case LOCATION_RIGHT_DOWN: {jfBase.setLocation(0+marginX, 0+marginY); break;}
case LOCATION_LEFT_DOWN
: {jfBase.
setLocation(Toolkit.
getDefaultToolkit().
getScreenSize().
width-jfBase.
getWidth()+marginX, 0
+marginY
); break;}
case LOCATION_RIGHT_UP
: {jfBase.
setLocation(0
+marginX,
Toolkit.
getDefaultToolkit().
getScreenSize().
height-jfBase.
getHeight()+marginY
); break;}
case LOCATION_LEFT_UP
: {jfBase.
setLocation(Toolkit.
getDefaultToolkit().
getScreenSize().
width-jfBase.
getWidth()+marginX,
Toolkit.
getDefaultToolkit().
getScreenSize().
height-jfBase.
getHeight()+marginY
); break;}
case LOCATION_CENTER
: {jfBase.
setLocation(Toolkit.
getDefaultToolkit().
getScreenSize().
width/2
-jfBase.
getWidth()/2,
Toolkit.
getDefaultToolkit().
getScreenSize().
height/2
-jfBase.
getHeight()/2
); break;}
}
}
/**
* Posiziona il JFrame relativamente al mouse in base al positionPolicy
* passatogli come parametro
*
* @param
* jfBase JFrame da posizionare relativamente alle coordinate del mouse ed
* al valore di positionPolicy.
* e l'evento del mouse (mouseClicked, mousPressed, ecc...)
* positionPolicy può assumere i seguenti valori:
* <ul>
* <li> LOCATION_RIGHT_DOWN - per posizionare l'angolo in alto
* a sinistra del JFrame con le coordinate del mouse</li>
* <li> LOCATION_LEFT_DOWN - per posizionare l'angolo in alto
* a destra del JFrame con le coordinate del mouse</li>
* <li> LOCATION_RIGHT_UP - per posizionare l'angolo in basso
* a sinistra del JFrame con le coordinate del mouse</li>
* <li> LOCATION_LEFT_UP - per posizionare l'angolo in basso
* a destra del JFrame con le coordinate del mouse</li>
* <li> LOCATION_CENTER - per posizionare il JFrame al centro
* del mouse</li>
* </ul>
* marginX è la lunghezza che distanzia il mouse dal JFrame
* marginY è l'altezza che distanzia il mouse dal JFrame
*/
public static void setLocation_RelativeMouse
(JFrame jfBase,
MouseEvent e,
short positionPolicy,
int marginX,
int marginY
) {
switch (positionPolicy) {
case LOCATION_RIGHT_DOWN: {jfBase.setLocation(e.getX()+marginX, e.getY()+marginY); break;}
case LOCATION_LEFT_DOWN: {jfBase.setLocation(e.getX()-jfBase.getWidth()+marginX, e.getY()+marginY); break;}
case LOCATION_RIGHT_UP: {jfBase.setLocation(e.getX()+marginX, e.getY()-jfBase.getHeight()+marginY); break;}
case LOCATION_LEFT_UP: {jfBase.setLocation(e.getX()-jfBase.getWidth()+marginX, e.getY()-jfBase.getHeight()+marginY); break;}
case LOCATION_CENTER: {jfBase.setLocation(e.getX()-(jfBase.getWidth()/2), e.getY()-(jfBase.getHeight()/2)); break;}
}
}
}