|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
DRAG-DROP UNE FORME GÉOMETRIQUE
Information sur la source
Description
Suite à de nombreuses questions dans le forums qui demandent comment faire simuler le drag&drop d'une forme géométrique. Je poste la présente source pour répondre à toutes ces questions. La présente source est inspirée d'un cours de formation en Java 2 de Mr. [Arthur Griffith]. Elle montre comment faire glisser un carré dans une fenêtre et le surtout elle offre l'avantage d'utiliser la technique du [Double-Buffering] artificielle pour assurer la fluidité de l'affichage en utilisant une image intermédiaire. A.B.
Source
- /**
- *
- */
- package com.ab.javafr;
-
- import java.awt.AlphaComposite;
- import java.awt.Canvas;
- import java.awt.Color;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.Image;
- import java.awt.Rectangle;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseListener;
- import java.awt.event.MouseMotionListener;
-
- /**
- * @author A.B.
- *
- */
- public class DraggableShape extends Canvas implements MouseMotionListener, MouseListener {
-
- /** Largeur du carré */
- public static final int SIDE = 50;
-
- /** Indique si le carré est en mouvement ou non */
- private boolean moving = false;
-
- /** Abscisse du coin supérieur-gauche */
- private int xPosition;
-
- /** Ordonnée du coin supérieur-gauche */
- private int yPosition;
-
- /** Abscisse du point où on fait glisser le carré */
- private int xDragg;
-
- /** Ordonnée du point où on fait glisser le carré */
- private int yDragg;
-
- /**
- * Rectangle qui représente le périmètre de la fenêtre.
- * Cette attribut sert essentiellement à capter si la fenêtre a été redimensionner.
- */
- private Rectangle frameRect;
-
- /**
- * Pour assurer la fluidité du mouvement du carré sans qu'il aura des troubles
- * On se sert de cet attribut pour simuler la technique du double-buffering.
- */
- private Image doubleBufferImage;
-
- /**
- * Crée une nouvelle instance de la classe 'DraggableShape'.
- */
- public DraggableShape() {
- setSize(400, 400);
- frameRect = new Rectangle(401, 401);
- addMouseListener(this);
- addMouseMotionListener(this);
- }
-
- /**
- * Quand on maintient une touche de la souris enfoncée et on fait glisser le curseur.
- */
- public void mouseDragged(MouseEvent e) {
- if (moving) {
- xPosition = e.getX() - xDragg;
- yPosition = e.getY() - yDragg;
- repaint();
- }
- }
-
- @Override
- public void paint(Graphics g) {
- // Créer un objet de type Graphics2D
- Graphics2D g2 = (Graphics2D)g;
-
- // Colorer le fond en blanc
- g2.setColor(Color.WHITE);
- g2.fillRect(0, 0, frameRect.width, frameRect.height);
-
- // Dessiner le carré en rouge
- g2.setColor(Color.RED);
- g2.fillRect(xPosition, yPosition, SIDE, SIDE);
-
- // Dessiner un contour transparent en bleu pour simuler l'effet de séléction
- if (moving) {
- g2.setColor(Color.BLUE);
- g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .3f));
- g2.fillRect(xPosition - 5, yPosition - 5, SIDE + 10, SIDE + 10);
- }
- }
-
- @Override
- public void update(Graphics g) {
- if (!frameRect.equals(getBounds())) {
- frameRect = getBounds();
- doubleBufferImage = createImage(frameRect.width, frameRect.height);
- }
-
- // Ne pas dépasser les bords de la fenêtre
- if (xPosition < 0) {
- xPosition = 0;
- } else if (xPosition > (frameRect.width - SIDE)) {
- xPosition = frameRect.width - SIDE;
- }
-
- // Ne pas dépasser les bords de la fenêtre
- if (yPosition < 0) {
- yPosition = 0;
- } else if (yPosition > (frameRect.height - SIDE)) {
- yPosition = frameRect.height - SIDE;
- }
-
- // Dessiner sur l'image intermédiaire
- Graphics imageGraphics = doubleBufferImage.getGraphics();
- paint(imageGraphics);
-
- // Afficher l'image intermédiaire
- g.drawImage(doubleBufferImage, 0, 0, this);
- }
-
- public void mouseMoved(MouseEvent e) {
- }
-
- public void mouseClicked(MouseEvent e) {}
-
- public void mouseEntered(MouseEvent e) {}
-
- public void mouseExited(MouseEvent e) {}
-
- public void mousePressed(MouseEvent e) {
- int x = e.getX();
- if ((x < xPosition) || (x > (xPosition + SIDE))) {
- return;
- }
-
- int y = e.getY();
- if ((y < yPosition) || (y > (yPosition + SIDE))) {
- return;
- }
-
- xDragg = x - xPosition;
- yDragg = y - yPosition;
- moving = true;
- }
-
- public void mouseReleased(MouseEvent e) {
- if (moving) {
- xPosition = e.getX() - xDragg;
- yPosition = e.getY() - yDragg;
- moving = false;
- repaint();
- }
- }
-
- }
/**
*
*/
package com.ab.javafr;
import java.awt.AlphaComposite;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
/**
* @author A.B.
*
*/
public class DraggableShape extends Canvas implements MouseMotionListener, MouseListener {
/** Largeur du carré */
public static final int SIDE = 50;
/** Indique si le carré est en mouvement ou non */
private boolean moving = false;
/** Abscisse du coin supérieur-gauche */
private int xPosition;
/** Ordonnée du coin supérieur-gauche */
private int yPosition;
/** Abscisse du point où on fait glisser le carré */
private int xDragg;
/** Ordonnée du point où on fait glisser le carré */
private int yDragg;
/**
* Rectangle qui représente le périmètre de la fenêtre.
* Cette attribut sert essentiellement à capter si la fenêtre a été redimensionner.
*/
private Rectangle frameRect;
/**
* Pour assurer la fluidité du mouvement du carré sans qu'il aura des troubles
* On se sert de cet attribut pour simuler la technique du double-buffering.
*/
private Image doubleBufferImage;
/**
* Crée une nouvelle instance de la classe 'DraggableShape'.
*/
public DraggableShape() {
setSize(400, 400);
frameRect = new Rectangle(401, 401);
addMouseListener(this);
addMouseMotionListener(this);
}
/**
* Quand on maintient une touche de la souris enfoncée et on fait glisser le curseur.
*/
public void mouseDragged(MouseEvent e) {
if (moving) {
xPosition = e.getX() - xDragg;
yPosition = e.getY() - yDragg;
repaint();
}
}
@Override
public void paint(Graphics g) {
// Créer un objet de type Graphics2D
Graphics2D g2 = (Graphics2D)g;
// Colorer le fond en blanc
g2.setColor(Color.WHITE);
g2.fillRect(0, 0, frameRect.width, frameRect.height);
// Dessiner le carré en rouge
g2.setColor(Color.RED);
g2.fillRect(xPosition, yPosition, SIDE, SIDE);
// Dessiner un contour transparent en bleu pour simuler l'effet de séléction
if (moving) {
g2.setColor(Color.BLUE);
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .3f));
g2.fillRect(xPosition - 5, yPosition - 5, SIDE + 10, SIDE + 10);
}
}
@Override
public void update(Graphics g) {
if (!frameRect.equals(getBounds())) {
frameRect = getBounds();
doubleBufferImage = createImage(frameRect.width, frameRect.height);
}
// Ne pas dépasser les bords de la fenêtre
if (xPosition < 0) {
xPosition = 0;
} else if (xPosition > (frameRect.width - SIDE)) {
xPosition = frameRect.width - SIDE;
}
// Ne pas dépasser les bords de la fenêtre
if (yPosition < 0) {
yPosition = 0;
} else if (yPosition > (frameRect.height - SIDE)) {
yPosition = frameRect.height - SIDE;
}
// Dessiner sur l'image intermédiaire
Graphics imageGraphics = doubleBufferImage.getGraphics();
paint(imageGraphics);
// Afficher l'image intermédiaire
g.drawImage(doubleBufferImage, 0, 0, this);
}
public void mouseMoved(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
int x = e.getX();
if ((x < xPosition) || (x > (xPosition + SIDE))) {
return;
}
int y = e.getY();
if ((y < yPosition) || (y > (yPosition + SIDE))) {
return;
}
xDragg = x - xPosition;
yDragg = y - yPosition;
moving = true;
}
public void mouseReleased(MouseEvent e) {
if (moving) {
xPosition = e.getX() - xDragg;
yPosition = e.getY() - yDragg;
moving = false;
repaint();
}
}
}
Conclusion
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
[Swing] Drag'n'drop dans un JTree [ par breed1200 ]
Salut!Voila mon problème:J'ai un jtree composé d'objets (pas des simples string) et j'aimerais savoir comment faire du dragndrop dessus. J'ai regardé
copy, paste,drag and drop [ par srodrigues ]
Bonjour,Je suis en train de realiser un petit projet. ce projet c'est un filemanager (une sorte de windows explorer). Mais je suis arrive à un stade o
Drag Drop dans une JTable [ par gollum50 ]
Voilà je voudrai sélectionner le contenu d'une cellule de ma table et la déposer dans n'importe quelle autre cellule. Je sais pas si c possible, mais
drag and drop dans une toolbar [ par djanele38 ]
Bonjour a tous,Je souhaiterais mettre en place un drag & drop dans une toolbar. Quelqu'un aurait-il une idée de comment je pourrais l'implémenter et s
drag n drop multiple items [ par eblood ]
Hello,j'ai un gros gros problème, je voudrais faire un drop multiple d'une JList vers une Jtable. Par 'multiple' je veux dire que je sélecti
Drag Drop AWT Reconnaissance d'objet [ par maitredede ]
Bonjour Je fait du drag and drop dans un applet en awt. Je drag un objet de mon applet et je le drop sur un autre : une image (dérivée d'un
drag and drop d'un fichier pour outlook [ par didrocks ]
Bonjour! J'aimerais pouvoir créer un drag and drop, de sorte que la sortie puisse être glissée sur un mail outlook. Je m'explique mieux
drag & drop de jcomponent graphique2D d'un jpanel à un autre jpanel [ par javademerde ]
bonjour tout le monde des programmeurs, g un problème de poids sur lequel je me penche depuis 2 semaines sans résultats. Je crée un jeu
[SWT] Plusieurs Drag & Drop dans une interface [ par lessecs ]
Bonjour, je suis entrain de faire une interface en SWT avec deux tableaux. Je veux faire deux Drag & Drop, l'un pour faire passer des données
Drag n Drop [ par zied1982 ]
Salut,j'ai une interface graphique avec Jbuilder X qui est divisée en deux JPanel. Le premier JPanel contient quelques JButton.Comment dépla
|
Téléchargements
Logiciels à télécharger sur le même thème :
|