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

 Java Discussion :

Souris et JPanel


Sujet :

Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Par défaut Souris et JPanel
    Bonjour,

    J'aimerai , dans le cadre d'un projet, pouvoir déplacer des JPanels,
    placés dans un tableau3x3 grille[i][j] (i et j indice du JLabel du milieu).
    Je voudrais savoir comment fonctionne un MouseDragged pour
    pouvoir en déplacant un JLabel sur un autre il y ai échange, ou un MouseClicked en cliquant sur le JLabel1 que l'on veut déplacer
    puis un second clique sur le JLabel2 remplacé par le 1.
    Pour le mouseDragged, je pense qu'il faut que d'abord je repère la position
    avec mais comment faire pour savoir que c'est l'image en [i-1][j] par exemple?

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 28
    Par défaut
    Tu veux savoir sur lequel des composant de ton tableau tu a cliqué c'est bien ça?

    Ce que je propose:
    -Parcours de ton tableau à deux dimension
    -Verifie si la coordonnée X de ta souris est dans le composant
    -Verifie si la coordonnée Y de ta souris est dans le composant
    - Si ces deux conditionnelles sont réalisé alors ta souris est sur le composant

    Un petit exemple?
    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
     
    MouseEvent e;
    Component grille[][];//tableau de composant possédant une position x et une position y dans ta fenetre
     
    /* Parcours de ton tableau */
    for(int i=0; i<grille.length; i++){
         for(int j=0; i<grille[i].length; j++){
                /* Si la position en X de ta souris se trouve dans la position en X de ton composant */
                if(grille[i][j].getX()>=e.getX() && grille[i][j].getX()+grille[i][j]largeur<=e.getX()){
                      if(grille[i][j].getY()>=e.getY() && grille[i][j].getY()+grille[i][j].hauteur<=e.getY()){
                              //bingo: c'est le bon composant !!!
                       }
                }
          }
    }

    J'éspére avoir bien compris ta question
    Bonne chance !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Par défaut
    helitik, c'est exactement ça, a ceci près que je ne suis pas sur de comprendre le : est ce que c'est la largeur total de la grille? Si oui on ne devrait pas utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grille[i][j].HORIZONTAL
    ?

    et puis je ne vois pas après comment on pourrai enregistré l'image selectionnée pour, en cliquant sur une autre image, on puisse les 'échanger' avec par exemple une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void move(JLabel a , JLabel b) 
     
     
     {
    	 Icon img = a.getIcon(); //récupère l'image contenue sur le jLabel a, on l'enregistre
    	 a.setIcon(b.getIcon()); //ensuite on peut remplacer l'image de a, par l'image de b
    	 b.setIcon(img); //remplace l'image de b par l'image de a (qu'on avait sauvergardée)
     }

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 28
    Par défaut
    le c'est la largeur de ton image.
    Le bout de code que je t'ai proposé permet juste de savoir si la souris est dans le composant

    on puisse les 'échanger'
    Pour échanger les images, il te suffit de remplacer les coordonnées de l'une par les coordonnées de l'autre, non?

    Je ne suis pas sur de comprendre ton probléme.

    Tu possédes deux images dans un JPanel et tu voudrais qu'en cliquant sur l'une, les images s'interchangent ? C'est ca?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Par défaut
    ba en fait j'ai neuf images qui sont dans neuf JLabel que j'ai placé dans un tableau 3x3 genre grille[i][j]

    le truc ce serait que quand je clique sur une des images, je puisse en cliquant sur une autre image, intervertir les deux images, d'où le problème de savoir quelle image j'ai cliqué. ET cela se ferait dans un mouseClicked

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 28
    Par défaut
    Pourquoi les mettre dans un JLabel?
    Peut être en les mettant dans un JPanel qui posséderait un GridLayout

    GridLayout est un layout permettant de placer les composants comme dans un tableau.
    Regarde la javadoc: http://java.sun.com/j2se/1.4.2/docs/...ridLayout.html

    Ou l'autre solution afficher le tableau (grille[][]) dans le paintComponent de ton JPanel.

    redit moi ce que tu prend comme solution.
    Ps: persos moi je prendrai la 2e solution. Aprés faut voir le reste de ton projet...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Par défaut
    J'ai opté pour la première solution parce que bon c'est la seule que je connaisse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JPanel panel=new JPanel();
     panel.setLayout(new GridLayout(hauteur,largeur,1,1));
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grille= new JLabel[hauteur][largeur];
    dans la fenêrte de l'appli
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Container contentPane = fenetre.getContentPane();
    enfin je place mes images comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     for(int i =0;i<hauteur;i++) 
     {
    	 for(int j=0;j<largeur;j++) 
    	 {
    		 grille[i][j]=new JLabel(getImage());
     
    		 grille[i][j].addMouseListener(this);
     
    		 panel.add(grille[i][j]);
    	 }
     }
     
     contentPane.add(panel,BorderLayout.CENTER);
    avec getImage() gere l'acquisition de la petite image à insérer dans le jLabel

    En résumé il ressemble à ça mon projet

  8. #8
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 28
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     grille[i][j].addMouseListener(this);
    Tu ajoute un MouseListener à chaque case de ton tableau.
    Dans ce cas si tu clique sur un label c'est le MouseListener associé à ce label qui sera appelé.

    Probléme résolu, non?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Par défaut
    non toujours pas.
    je viens de penser à un truc: si je fais un mousePressed, que j'enregistre l'image, puis quand je fais un mouseReleased, j'enregistre l'image, puis j'echange les deux images avec la fonction move(). c'est réalisable?

    en fin de compte, il faudrait que j'enregistre le [i] et [j] de l'image cliquée, puis enregistrer le [i] et [j] de l'autre pour en suite pourvoir utiliser move(). Et ça, je sais pas faire, à moins qu'il y ai une autre méthode mais là je vois pas...

  10. #10
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 28
    Par défaut
    Il te faut une classe qui stocke :
    - x et y de la première image
    - x et y de la deuxième image

    Quand tu clique sur une image:
    Si premier ensemble de coordonnée est null:
    -> tu stocke les indices de la 1ere l'image.
    Si premier ensemble de coordonnée est non null:
    -> tu stocke les indices de la 2e image
    ->Tu effectue la permutation
    -> tu remet les deux ensembles de coordonnée à null.

    Pour effectuer ta permutation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    permute()
    {
          JLabel temp = grille[i2][j2];
          grille[i1][j1].setIcon(temp.getIcon());
          grille[i2][j2].setIcon(grille[i1][j1].getIcon());
     
    }
    Tu me redi si ça fonctionne ...

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Par défaut
    Bon alors j'ai trouvé une solution il y a peu de temps, je vous la donne au cas où quelqu'un en aurait besoin
    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
    int cpt=0;
     public JLabel label1=null;
      public JLabel label2 = null;
     
     public void mouseClicked(MouseEvent ev) 
    	 {	
    	 cpt++;
     
    	  if(cpt==1)
    	 {
    		 label1=(JLabel) ev.getSource();
    	 }
     
    	 if(cpt==2)
    	 {
    		 label2=(JLabel) ev.getSource();
    		 cpt=0;
    		 changer(label1, label2);// méthode qui effectue la permutation des images associées au label1 et 2
     
    	 }
    	}

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

Discussions similaires

  1. Souris et JPanel
    Par thithib112 dans le forum Débuter
    Réponses: 0
    Dernier message: 22/04/2009, 15h10
  2. Evenements souris sur JPanel
    Par nemo_str dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 07/05/2008, 15h35
  3. Déplacement avec la souris dans un JScrollPane/JPanel
    Par deadstar62 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 27/04/2007, 17h10
  4. Redimentionner un JPanel avec la souris
    Par soad dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 03/04/2006, 12h36
  5. [JPanel] Redimensionnable à la souris
    Par komando dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 10/06/2005, 17h19

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