Deplacement d,un bouton a l'aide de la sourit

Résolu
manoa21 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
manoa21 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
J'ai un problème, je voudrai déplacer un bouton a l'aide de la sourit. le bouton se déplace mais il ne suit pas le curseur, en plus le bouton prend deux position. j'ai utilise MouseMotionListener pour prendre la position du curseur dans la fenêtre. Voici ci-dessous le code que j'ai programmer. Je vous prie de m'aider car j'ai tant besoin de ce travail> merci d'avance.
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Fenetre extends JFrame implements MouseMotionListener{
	private int x=250;
	private int y=400;
	public JButton b=new JButton("bouton");
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
public Fenetre(){
		
		super();
		this.setTitle ("Carte des pôles et des Zéros");
		this.setSize(800,600);
		this.setLocationRelativeTo(null);
		this.setResizable(false);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Container cont=  getContentPane();
		cont.setLayout(null);
		b.setBounds(40,10, 100, 20);
		cont.add((Component) b);
		b.setBackground(Color.RED);
		b.addMouseMotionListener(new MouseMotionListener(){

			@Override
			public void mouseDragged(MouseEvent j) {
				// TODO Auto-generated method stub
				x = j.getX();
				y = j.getY();
				b.setLocation(x,y);
			}

			@Override
			public void mouseMoved(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}
		}
		);
		this.setVisible(true);
}
}



import javax.swing.*;
public class Corps {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JFrame fen=new Fenetre();
		fen.setVisible(true);
	}

}



A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Pour ce que tu veux faire, il n'y a pas de raison que la classe Fenetre implémente MouseMotionListener, d'autant plus que tu ne définis pas ses méthodes...

Sinon, voici une version qui fonctionne de ton code :

import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Fenetre extends JFrame
{
	private static final long serialVersionUID = 1L;
	
	private int x=250;
	private int y=400;
	
	public final JButton b;
	
	public Fenetre()
	{
		setTitle("Carte des pôles et des Zéros");
		setSize(800,600);		
		setLocationRelativeTo(null);
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(null);
		
		b=new JButton("bouton");
		b.setBounds(40,10, 100, 20);
		b.setBackground(Color.RED);
		b.addMouseMotionListener(new MouseMotionListener()
		{
			private int dx,dy;
			
			public void mouseDragged(MouseEvent e) 
			{
				x += e.getX()-dx;
				y += e.getY()-dy;
				b.setLocation(x,y);
			}

			public void mouseMoved(MouseEvent e) 
			{
				dx = e.getX();
				dy = e.getY();
			}
		});
		
		add(b);
		setVisible(true);
	}

	public static void main(String...args)
	{
		new Fenetre();
	}
}
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Remarque : il y aura un léger bug lors du premier déplacement, c'est parce que dans ton code (x,y) ne correspondaient pas réellement à la position initiale du bouton, il faudrait donc plutôt mettre :

b.setBounds(x, y, 100, 20);
Ou alors, en modifiant le MouseMotionListener :

public void mouseDragged(MouseEvent e) 
{
	b.setLocation(b.getX()+e.getX()-dx, b.getY()+e.getY()-dy);
}

Avec cette dernière solution, les variables x et y ne servent plus à rien...
0
manoa21 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
je vous remercie de votre aide et je vais essayer votre solution, merci infiniment
0
manoa21 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour !
J'ai essayé ce que vous m'avez suggéré hier et ça a marché ! Je vous remercie par ce que votre solution m'a tant aidé! Ce problème est résolu mais j'ai un nouveau problème concernant encore ce sujet : ce que nous avons fait c'est qu'on a placé le bouton dans une fenêtre qui hérite de JFrame mais si on utilise une autre classe qui hérite du JPanel en utilisant la méthode « paintComponent(Graphics g) » le bouton se déplace mais les autres positions que ce bouton a pris apparait encore ! En plus, si on relâche le souris et on glisse à nouveau le bouton le bouton prend la position initiale pour se déplacé.
Voici le code que j'ai fait ! Merci d'avance et encore merci de votre solution du dessus!

import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Fenetre extends JFrame
{
	private static final long serialVersionUID = 1L;
	
	
	public static JButton b,c;
	
	public Fenetre()
	{
		setTitle("Carte des pôles et des Zéros");
		setSize(800,600);		
		setLocationRelativeTo(null);
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(null);
		setVisible(true);
	}

	public static void main(String...args)
	{
		Fenetre fen = new Fenetre();
		fen.setContentPane(new Panneau());
		fen.repaint();
	}
}


et voici ci dessous le code de JPanel
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.*;

public class Panneau extends JPanel{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	public static JButton pole1;
	public Panneau(){
	}
	public void paintComponent(Graphics g){
		
		pole1=new JButton("bouton");
		pole1.setBounds(100,240, 10, 10);
		pole1.setBackground(Color.RED);
		pole1.addMouseMotionListener(new MouseMotionListener()
		{
			private int dx,dy;
			
			public void mouseDragged(MouseEvent e) 
			{
				if (((pole1.getX()+e.getX()-dx)>=35)&&((pole1.getX()+e.getX()-dx)<375)&&((pole1.getY()+e.getY()-dy)>=50)&&((pole1.getY()+e.getY()-dy)<390) )
					{
						pole1.setLocation(pole1.getX()+e.getX()-dx, pole1.getY()+e.getY()-dy);
					}
			}

			public void mouseMoved(MouseEvent e) 
				{
					dx = e.getX();
					dy = e.getY();
				}
		});
		add(pole1);
		}
		
	}
0
manoa21 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai essayé ta code et ça marche, le bouton bouge mais le probleme c'est que le bouton n'a pa pris la position initiale qu'on lui affecte! en plus lors du premier deplacement il ya un probleme! si tu peus resoudre ce probleme! mais en tous cas mercie infiniment de m'avoir aidé! mercie eh!
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Le problème dont tu parles je l'ai déjà expliqué et résolu, il faut tout lire ! (voir le message #2)
0