Pb pour correctement déplacer mon image ds un JPanel

damsaleg95 Messages postés 1 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 24 mai 2005 - 24 mai 2005 à 15:41
bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 - 2 juin 2005 à 00:02
Bonjour à tous,

Voila je suis en plein dans un projet peu simple (celui de fair eun logiciel qui permet de faire des plans de maison en 2D) et la je boss sur la partie de déplacement d'un image ds un jpanel. Mon image ne bouge pas partout sur ma fenêtre et j'aimerai bien de l'aide
voici la source:

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;


import javax.swing.JFrame;
import javax.swing.JPanel;


public class Deplace_meuble extends JPanel implements MouseMotionListener {


//coordonnées de l'image et son placement sur la feuille
private int x1 = 500;


private int y1 = 200;


private int xMouse = 0;


private int yMouse = 0;


//private int y2 = 500;


//private int x2 = 900;


//select=true si l'image est cliquée, false sinon
boolean select = false;


//Image à afficher
Image image = Toolkit.getDefaultToolkit().getImage(
"images/Salle séjour/Bench.gif"); //l'image à dessiner


//Image image2 = Toolkit.getDefaultToolkit().getImage(
// "images/Salle séjour/Foyer.gif"); //l'image à dessiner


//main de test
public static void main(String args[]) {
Deplace_meuble test1 = new Deplace_meuble();
JFrame test = new JFrame("Test Déplacement");
test.setBounds(400, 100, 904, 768);
test.getContentPane().add(test1);
test.setVisible(true);
}


//Création de l'interface
public Deplace_meuble() {
this.setBounds(400, 100, 904, 768);//setBounds(int xi, int yi, int
// large, int haut)
//this.setVisible(true);
this.addMouseMotionListener(this);
}



public void mouseMoved(MouseEvent e) {
select = false;//si la souris bouge sans le bouton droit appuyé, on
// déselectionne le point
}


public void mouseDragged(MouseEvent e) {
int x = e.getX();// récupere la coordonnée x de la souris
int y = e.getY();// récupere la coordonnée y de la souris


// boolean ynull = true;
// boolean xnull = true;
//si on dragndrop l'image
if (!select && x > x1 && y < y1 )//&& x <= x2 && y <= y2)
//if(!select && x>x1 && y<=y1 )
{
select = true;
xMouse = x;
yMouse = y;
System.out.println("coucou");
}


//Si l'image est cliquée, on la fait suivre le curseur à l'écran
if (select) {
/* if( x>xMouse ){
x1 = x1 + (x-xMouse);
}else if( x<xMouse ){
x1 = x1 + (xMouse-x);
}
xMouse = x;
if( y>yMouse ){
y1 = y1 + (y-yMouse);
}else if( y<yMouse ){
y1 = y1 + (yMouse-y);
}else if( y == yMouse ){
y1 = y1 + yMouse;
}
yMouse = y;*/
x1 = x;
y1 = y;
repaint();
}/* * else { x2 x; y2 y; repaint(); }
*/


} public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
//on dessine un font blanc
//g2.setColor(Color.gray);
//g2.fillRect(400, 100, 904, 768);
//on met l'image sur la fenetre
//Regarde s'il faut enclancher l'antialiasing
if (true)
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
else
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_OFF);


//Regarde s'il faut enclancher le double buffering
setDoubleBuffered(true);
g.drawImage(image, x1, y1, this);
//g.drawImage(image2, x2, y2, this);
}
}

Merci!!!
S'il vous plait aidé moi

1 réponse

bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 2
2 juin 2005 à 00:02
Bon j'ai reussi a faire marcher ton truc...

d'avance, désolé d'avoir un peu retouché le code...ca risque peut etre de ne pas correspondre a ce que tu voulais...

donc quelques modifs :

- ajout d'un MouseListener (plus simple pour gerer le select/pas select)

quand mouseclicked on test et on select ou pas, mouseReleased on deselectionne

- mouseMoved ne sert pu a rien

- nettoye un peu le mouseDragged

si tu as d'autre question hesite pas.



ha oui , j'ai vire pas mal de ligne et de commentaire pour mieux voir, faudra re indenter !



import java.awt.*;

import java.awt.event.*;



import javax.swing.JFrame;

import javax.swing.JPanel;



public class Deplace_meuble extends JPanel implements MouseListener,MouseMotionListener {



//coordonnées de l'image et son placement sur la feuille

private int x1 = 500;



private int y1 = 200;



private int xMouse = 0;



private int yMouse = 0;



//select=true si l'image est cliquée, false sinon

boolean select = false;



//Image à afficher

Image image = Toolkit.getDefaultToolkit().getImage(

"image.png"); //l'image à dessiner



//main de test

public static void main(String args[]) {

Deplace_meuble test1 = new Deplace_meuble();

JFrame test = new JFrame("Test Déplacement");

test.setBounds(10, 10, 800, 600);

test.getContentPane().add(test1);

test.setVisible(true);

}



//Création de l'interface

public Deplace_meuble() {

this.setBackground(Color.RED);

// large, int haut)

//this.setVisible(true);

this.addMouseMotionListener(this);

this.addMouseListener(this);

}



public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

public void mouseClicked(MouseEvent e) {}

public void mousePressed(MouseEvent e) {

int x = e.getX();// récupere la coordonnée x de la souris

int y = e.getY();// récupere la coordonnée y de la souris

if (!select &&

(x > x1 && x < x1+image.getWidth(this) ) &&

(y > y1 && y < y1+image.getHeight(this) ) )

{

select = true;

xMouse = x;

yMouse = y;

}

}

public void mouseReleased(MouseEvent e) {

select = false;//si la souris bouge sans le bouton droit appuyé, on

// déselectionne le point

}



public void mouseMoved(MouseEvent e) {}



public void mouseDragged(MouseEvent e) {

int x = e.getX();// récupere la coordonnée x de la souris

int y = e.getY();// récupere la coordonnée y de la souris

System.out.println(select);

//Si l'image est cliquée, on la fait suivre le curseur à l'écran

if (select) {

x1 = x;

y1 = y;

repaint();

}

}



public void paintComponent(Graphics g) {

super.paintComponent(g);

Graphics2D g2 = (Graphics2D) g;



//on met l'image sur la fenetre

//Regarde s'il faut enclancher l'antialiasing

if (true)

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,

RenderingHints.VALUE_ANTIALIAS_ON);

else

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,

RenderingHints.VALUE_ANTIALIAS_OFF);



//Regarde s'il faut enclancher le double buffering

setDoubleBuffered(true);

g.drawImage(image, x1, y1, this);



}

}
0
Rejoignez-nous