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

Interfaces Graphiques en Java Discussion :

Listener pour un point


Sujet :

Interfaces Graphiques en Java

  1. #21
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Je vais m'interesser à ce problème de thread.

    Entre temps j'ai finalement trouvé une solution un peu bricolée:

    au lieu d'initialiser la zone par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new Rectangle(bouton.getLocation(), bouton.getSize())
    j'initialise la zone par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new Rectangle(0,0,1366,800)
    Cela recouvre toute la page (et donc la totalité du bouton). Et ça marche.

    Ce que je trouve etrange c'est que si je ne suis pas sur un bouton, (bien que je sois dans la zone définie par 0,0,1366,800), cela ne fait rien.
    Donc la solution fonctionne. Mais je trouve tout de même ça bizarre car dans le code on a juste un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(zone.contains(mousePoint))
    et donc que ça ne s'active pas si je ne suis pas sur le bouton

  2. #22
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par pythagor Voir le message
    Ce que je trouve etrange c'est que si je ne suis pas sur un bouton, (bien que je sois dans la zone définie par 0,0,1366,800), cela ne fait rien.
    C'est normal dans la simulation à base de souris : on récupère les coordonnées de la souris par un getMousePosition() sur le bouton, et cette méthode retourne null si la souris est en dehors du bouton ! Et je traite le cas du Point null dans mon code (puisque je ne peux pas faire de test dessus, puisqu'il est null, forcément il n'est jamais dans aucun rectangle)

  3. #23
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Ah j'ai compris . Merci

    Je pense que même si ça marche avec mon bricolage, je vais essayer d'utiliser la solution avec le SwingUtilities.invokeLater()

    Il faut juste le mettre dans le Main ?

    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
    15
    16
    17
    18
    19
    20
    package pactInitial;
     
    import javax.swing.SwingUtilities;
     
    import fenetres.FenetreDepart;
    import audio.LecteurAudio;
     
     
    public class Main {
     
    	public static void main(String[] args) {
     
    		Runnable run = new Runnable() {			
    			public void run() {new FenetreDepart();}
    		};
    		SwingUtilities.invokeLater(run);
     
     
    	}
    }

  4. #24
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par pythagor Voir le message
    Il faut juste le mettre dans le Main ?
    Oui, ça suffit.

    En fait, il faudrait faire systématiquement tout ordre SWING dans le thread de SWING (Event Dispatch Thread). On peut voir de nombreux sources où ce n'est pas fait, parce qu'habituellement ça fonctionne pour les cas simples, en particulier la construction initiale de l'UI, avant son premier affichage. En fait, d'après les spécifications ce n'est pas censé fonctionner (on ne garanti pas son fonctionnement), mais le code de SWING est permissif pour certaines JVM (j'ai eu beaucoup plus de soucis avec du code SWING en dehors de l'EDT sur la JVM Apple par exemple). Pour éviter tout souci, toujours prendre l'habitude de tout faire sur l'EDT.

  5. #25
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Merci.

    Bizarrement j'ai toujours le bug.

    Cependant j'ai trouvé une autre solution qui me paraît plus efficace (et qui fonctionne très bien)

    En fait pour voir si la souris est dans un bouton, on fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (position != null && zone.contains(position))
    cependant vous dites que ceci s'applique directement au bouton et donc que si nous ne sommes pas sur le bouton position==null

    j'ai donc remplacé cette ligne par
    puisque la zone qui nous intéresse est toujours exactement celle du bouton. on obtient bien true si on est dessus et false sinon. La tout marche rapidement

  6. #26
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par pythagor Voir le message
    puisque la zone qui nous intéresse est toujours exactement celle du bouton. on obtient bien true si on est dessus et false sinon. La tout marche rapidement
    Mais, le but, c'était pas de faire un truc pour une kinect, au départ ? Parce que quand vous allez brancher la classe qui vous envoie la position de la main détectée par la kinect, ça marchera plus de faire ça

  7. #27
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Effectivement cela va poser problème

    En faisant une recherche sur internet, j'ai trouvé ceci

    La classe java.awt.Robot permet entre autres de déplacer automatiquement la souris via la méthode mouseMove(int,int). La classe Robot permet également d'actionner les boutons de la souris ou d'entrer des touches au clavier.

    Attention :Le déplacement automatique de la souris a le don d'énerver certains utilisateurs, il est donc conseillé de l'utiliser prudemment et/ou de permettre à l'utilisateur de désactiver cette fonction.
    Donc pensez vous que si je fais quelque chose du type ci dessous, cela va marcher ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Point p= VraiKinect.getPosition();
    mouseMove(p.getX(),p.getY());
    Point position =bouton.getMousePosition();
    // puis le code qu'on a déja avec
    Je n'ai pas encore testé, je vais essayer

  8. #28
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ça peut être une solution si tu veux que le pointeur de souris bouge en fonction de la position de la main donné par la kinect. C'est même une bonne idée pour la cohérence globale. Tu auras ainsi même les tooltips et autres réaction standard (Par contre, tu auras peut-être quelques effets graphiques génants (ou pas) avec l'hover). Il existe même des applications qui font ça directement sous Windows (j'en avais utilisé une avec l'EyeToy à une époque).

    Maintenant, le code que je t'ai donné fonctionne, donc si le tien ne fonctionne pas, c'est qu'il y a un problème dedans, et donc il n'y a pas de bidouille à faire : il y a juste à corriger les problèmes.

  9. #29
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup. Je vous tiens au courant de comment cela va se passer. L'integration est prévue pour la semaine prochaine

  10. #30
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Bonsoir,

    nous avons terminé l'intégration.
    J'ai du faire pas mal de modifications du code (en plus de celles dont on avait discuté sur le déplacement du curseur ) mais le tout fonctionne très bien.

    Merci beaucoup, je vois mal comment j'aurais réussi sans vous

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [3D] matrice de déformation pour un point de vue décalé
    Par mou013 dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 04/02/2006, 18h29
  2. [Débutant] Listener pour une entrée dans le presse papier.
    Par Silvio02 dans le forum Général Java
    Réponses: 6
    Dernier message: 08/01/2006, 22h44
  3. Quel listener pour l'édition d'une JTable?
    Par ®om dans le forum Composants
    Réponses: 4
    Dernier message: 11/05/2005, 21h13
  4. [JSP]comment créer un listener pour ma base de données
    Par Ekimasu dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 10/05/2004, 14h49

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