pika842 | Bonjour,
Voila alors j'ai une image dessinee dans un JPanel (image qui peut change suivant les actions sur une JTable) et je voudrais pouvoir dessiner sur cette image des rectangles 9ou l'on verrai que le contour. C'est en fait pour que l'utilisateur puisse selectionner certaine partie de l'image.
Le rectangle serait donc defini comme sur un logiciel comme paint, l'utilisateur clique sur le bouton gauche puis bouge la souris jusqu a ce que la taille lui convienne..et lache le bouton.
Mon probleme est que je n'arrive pas a effacer le rectangle dessine au fur et a mesure que l'utilisateur l'agrandi.
voila mon bout de code :
Code :
- panImagePage = new ChangeImageJPanel("./src/img/ImageJPG.jpg" );
- panImagePage.setLayout(null);
- panImagePage.setLocation(new Point(16, 101));
- panImagePage.setSize(new Dimension(353, 446));
- panImagePage.addMouseListener(new MouseListener()
- {
- public void mouseClicked(MouseEvent e)
- {
- }
- public void mousePressed(MouseEvent e)
- {
- xs = e.getX();
- zs = e.getY();
- start=1;
- }
- public void mouseReleased(MouseEvent e)
- {
- Graphics g = getGraphics();
- xf = e.getX();
- zf = e.getY();
- int x = (int)xs + 16 + 331 + 5;
- int y = (int)zs + 101 + 18 + 23;
- int x1 = (int)xf - (int)xs;
- int y1 = (int)zf - (int)zs;
- g.drawRect(x,y,x1,y1);
- start=0;
- nextX = 0;
- nextY = 0;
- }
- public void mouseEntered(MouseEvent e)
- {
- }
- public void mouseExited(MouseEvent e)
- {
- }
- });
- panImagePage.addMouseMotionListener(new MouseMotionListener(){
- public void mouseDragged(MouseEvent e) {
- if (start==1){
- int x = (int)xs + 16 + 331 + 5;
- int y = (int)zs + 101 + 18 + 23;
- nextX = e.getX()-(int)xs;
- nextY = e.getY()-(int)zs;
- Graphics g = getGraphics();
- //g.clearRect(x, y, prevX, prevY);
- g.clipRect(x,y,nextX,nextY);
- g.drawRect(x,y,nextX,nextY);
- g.dispose();
- }
- }
- public void mouseMoved(MouseEvent e) {
- }
- });
|
La j'utilise g.clipRect pour justement ne pas avoir ce probleme mais c'est une solution de secours.
Puis de toute facon si l'utilisateur revient en arriere ( reduit le rectangle) cela repose le probleme.
Desole pour les accents, je suis sur un clavier anglais.
merci beaucoup.
|