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
| rotected void paintComponent(Graphics g)
{
addMouseListener(this);
addMouseMotionListener(this);
super.paintComponent(g);
if(monImage != null)
g.drawImage(monImage,200,10,null);
final Graphics2D g2 = (Graphics2D) g;
if ( derniereSelection!=null ) {
g2.setColor(Color.BLUE);
g2.draw(derniereSelection); // dessine le rectangle
}
if (pmove != null && porig != null) {
g2.setColor(Color.BLUE);
// calcul de la selection
final Rectangle rect = new Rectangle((pmove.x > porig.x) ? porig.x : pmove.x,
(pmove.y > porig.y) ? porig.y : pmove.y,
(pmove.x > porig.x) ? pmove.x - porig.x : porig.x
- pmove.x, (pmove.y > porig.y) ? pmove.y
- porig.y : porig.y - pmove.y);
// dessine le fond de la selection avec un effet de transparence
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .2f));
g2.fillRect(rect.x, rect.y, rect.width, rect.height);
// suppression de la transparence pour dessiner la bordure
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f));
g2.drawRect(rect.x, rect.y, rect.width, rect.height);
}
}
public void mousePressed(final MouseEvent e) {
porig = e.getPoint(); // récupération du point d'origine
// repaint du composant
repaint();
}
public Rectangle getDerniereSelection() {
return derniereSelection;
}
public void mouseReleased(final MouseEvent e) {
// cleanup de l'affichage
if (!Objects.equals(pmove,porig) ) { // on ne fait pas en cas de sélection vide (si les deux points sont les mêmes)
Rectangle rectangle = new Rectangle();
rectangle.setFrameFromDiagonal(porig,pmove); // on s'assure que le rectangle est correctement orienté en utilisant cette méthode
derniereSelection = rectangle;
}
pmove = null;
porig = null;
// repaint du composant
repaint();
}
public void mouseDragged(final MouseEvent e) {
pmove = e.getPoint(); // récupération du point en déplacement
// repaint du composant
repaint();
}
public void mouseClicked(final MouseEvent e) { }
public void mouseEntered(final MouseEvent e) { }
public void mouseExited(final MouseEvent e) { }
public void mouseMoved(final MouseEvent e) { } |
Partager