1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
| import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class Test extends JFrame {
private String[] genre = { " Masculin ", " Feminin " };
public Test() {
this.setTitle("Deplacement");
this.setSize(500, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.getContentPane().setLayout(null); // on n'utilise pas de Layout Manager
// on créé 2 tableaux pour stocker les composants, parce qu'on a besoin de leurs références pour les déplacer
JLabel[] labels = new JLabel[3];
JComponent[] fields = new JComponent[3];
labels[0] = new JLabel("Nom:");
fields[0] = new JTextField(10);
labels[1] = new JLabel("Prénom:");
fields[1] = new JTextField(10);
labels[2] = new JLabel("Sexe:");
fields[2] = new JComboBox<String>(genre);
// le fait qu'on ait des tableaux permet de gérer les composants en boucle
for(int i=0; i<3; i++) {
add(labels[i]);
add(fields[i]);
// on place et dimensionne les composants parce qu'il n'y a pas de Layout Manager qui le fait
labels[i].setSize(labels[i].getPreferredSize());
fields[i].setSize(fields[i].getPreferredSize());
if (i>0){
labels[i].setLocation(fields[i-1].getX()+fields[i-1].getWidth(), 0);
}
fields[i].setLocation(labels[i].getX()+labels[i].getWidth(), 0);
// on créé le MouseAdapter
MouseAdapter mouseAdapter = new MoveMouseAdapter(labels[i], fields[i]);
labels[i].addMouseListener(mouseAdapter); // on enregistre le MouseAdapter comme MouseListener sur le label (pour détecter l'enfoncement et le relachement du bouton
labels[i].addMouseMotionListener(mouseAdapter); // on enregistre le MouseAdapter comme MouseMotionListener sur le label (pour détecter le mouvement de la souris)
}
this.setVisible(true);
}
public static void main(String[] main) {
new Test();
}
private static class MoveMouseAdapter extends MouseAdapter {
private boolean moved;
private int dx;
private int dy;
private JLabel label;
private JComponent field;
public MoveMouseAdapter(JLabel label, JComponent field) {
this.label=label;
this.field=field;
}
@Override
public void mousePressed(MouseEvent e) {
if ( e.getButton()==MouseEvent.BUTTON1 ) { // sur le bouton gauche
startMove(e);
}
}
private void startMove(MouseEvent e) {
moved=true;
// on mémorise la position relative de la souris par rapport au composant
dx=e.getX();
dy=e.getY();
}
@Override
public void mouseDragged(MouseEvent e) {
if (moved) {
doMove(e);
}
}
private void doMove(MouseEvent e) {
// on déplace
// la nouvelle position est l'ancienne plus la différence entre la position actuelle de la souris et la position relative de la souris au démarrage du déplacement
label.setLocation(label.getX() + e.getX() - dx, label.getY() + e.getY() - dy);
field.setLocation(label.getX()+label.getWidth(), label.getY());
}
@Override
public void mouseReleased(MouseEvent e) {
if ( e.getButton()==MouseEvent.BUTTON1 && moved) {
stopMove();
}
}
private void stopMove() {
moved=false;
}
}
} |
Partager