IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Bouger un composant avec la souris


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 31
    Par défaut Bouger un composant avec la souris
    Bonjour a tous,

    J'essaye de faire une petite application qui permet de déplacer des composant dans une fenetre a l'aide de la souris.

    j'ai donc créer la classe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public class MoteurBouge implements MouseInputListener{
     
    	JButton boutonClique;
     
    	public MoteurBouge(JButton b){
    		this.boutonClique = b;
    	}
     
    	@Override
    	public void mouseDragged(MouseEvent e) {
    		// TODO Auto-generated method stub
    		int x = e.getX();
    		int y = e.getY();
    		boutonClique.setLocation(x,y);		
     
    	}
    Cela marche a peu prés sauf que le composant bouge d'une façon un peu surprenante : il suit a vaguement ma souris tout en faisant des aller retour vers une autre position qui varie. En gros il a avance moins vite que mon curseur et il y a une chance sur 2 qu'il se retrouve pas la ou je lui ai demandé.

    J'avais une autre question qui était de savoir comment délimité la zone dans la quelle mon composant peut se déplacer


    Merci d'avance

    Ortholle

  2. #2
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    salut.
    je suis pas sur mais je pense que le problème vient du fait que les objet swing ont pour origine le coin supérieur gauche c'est a dire le

    .setLocation(x,y); donne la nouvelle position du coin supérieur gauche et pour résoudre ton problème ,je te propose de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    boutonClique.setLocation(x+largeur_bouton/2,y+hauteur_bouton/2);

  3. #3
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 31
    Par défaut
    Hey, je viens de tester mais sa ne change malheuresement pas le comportement problématique de mon composant, merci quand même d'avoir essayé !

    voila le code de ma classe fenêtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    package TD3;
     
    import java.awt.*;
     
    import javax.swing.*;
     
    public class Fenetre {
     
    	JButton[] tB={new JButton("1"), new JButton("2"), new JButton("3"), new JButton("4"), new JButton("5"),
    			new JButton("6"), new JButton("7"), new JButton("8")};
    	JPanel p1, p2, p3, p4, p5, p6, p7, p8, p9, panel;
    	JFrame fenetre;
     
    	public Fenetre(){
     
    		GridLayout dispo_Grid = new GridLayout(3,3);
    		panel = new  JPanel();
    		panel.setLayout(dispo_Grid);	
    		int[] t = new int[8];
    		int k=0;
    		boolean b;
    		while(t[7] == 0)
    		{
    			b=true;
    			int n=(int)(Math.random()*9);
    			for(int j=0; j<8; j++)
    			{
    				if(t[j]==n) b=false;
    			}
    			if(b==false) continue;
    			t[k]=n;
    			k++;
    		}
    		for(int i=0; i<8; i++)
    		{
    			panel.add(tB[t[i]-1]);
    		}
     
    		fenetre = new JFrame("Puzzle");
    		fenetre.getContentPane().add(panel);
    		fenetre.setSize(500,500);
    		fenetre.setResizable(false);
    		fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		fenetre.setVisible(true);
     
     
     
    		for(int i=0; i<8; i++)
    		{
    			MoteurBouge mB = new MoteurBouge(tB[i]);
    			tB[i].addMouseMotionListener(mB);
    		}
     
    	}
    }
    En gros elle permet d'obtenir dans une grille 3x3 avec 8 bouton positionés aléatoirements.

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 96
    Par défaut
    Je crois que, dépendament de ton layout, tu ne peut pas déplacer des objets.

    Tu peut utiliser le FlowLayout(), le GridLayout() ou le BagLayout(), je crois.

  5. #5
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 31
    Par défaut
    Bah j'utilise une Grid_Layout et mon objet se déplace c'est juste qu'il ne suit pas ma souris ! c'est trés dure de décrire son comportement mais en gros il fait des allé retour entre deux point qui se déplacent a peu prés dans la même direction que ma souris.


    Je sais que c'est pas trés claire et c'est pour sa que je vous ai posté le code si vous voulez tester

    En tout cas merci d'essayer xD

    Ortholle

  6. #6
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Bonjour,
    un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fenetre.setLayout(null);
    devrait résoudre ton problème

    en effet,ton bouton est soumis aux règles de ton gridLayout,et ne peut par conséquent pas se positionner comme il veut,et produit un résultat "aléatoire"

    Par contre,si tu décides de ne pas mettre de layout,ton bouton se déplacera correctement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Déplacer un composant avec la souris
    Par GéniuS77 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 07/04/2011, 23h12
  2. Bouger un composant avec le clavier
    Par issamomassi dans le forum Windows Forms
    Réponses: 1
    Dernier message: 12/04/2010, 12h07
  3. Réponses: 4
    Dernier message: 17/03/2009, 09h37
  4. Bouger image avec clavier souris + zoom avec molette
    Par yggdrasylv dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 03/03/2009, 00h02
  5. Connaitre le Composant survolé avec la souris
    Par Hauwke dans le forum Composants VCL
    Réponses: 3
    Dernier message: 12/10/2005, 19h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo