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

Graphisme Java Discussion :

Modele GL d'un GUI pour des "agents" mobiles


Sujet :

Graphisme Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 21
    Points : 17
    Points
    17
    Par défaut Modele GL d'un GUI pour des "agents" mobiles
    Bonjour,

    Je rentre dans le vif du sujet pour lancer rapidement une discussion autour de mon problème. Pour faire simple, je vais prendre un exemple simplifié : disons que je développe un simulateur de radar avec des cibles mobiles affichées sur ce radar. J'aimerais bien pouvoir considérer ces cibles comme des objets graphiques à part entière :
    - click droit -> affiche un menu et effectuer des actions sur ces cibles
    - drag and drop en mode debug -> pour déplacer les cibles
    - etc.

    J'ai développé un modèle type M-VC. Dans le modèle j'ai une classe Radar qui représente l'espace aérien capté et une classe Cible qui répresente les avions détectés dans cet espace. Côté Vue-Controleur, j'ai une classe EcranRadar (un JPanel) qui représente le Radar et une classe Spot (un JLabel) qui représente une Cible. L'architecture est donc a priori très simple :
    - un Radar est agregé de plusieurs Cibles (Vector<Cible> myTargets)
    - un EcranRadar est agrégé de plusieurs Spot (Vector<Spot> mySpots)
    - Radar est le Modele de EcranRadar; EcranRadar est Vue-Controleur du Radar
    - Cible est le Modele de Spot; Spot est Vue-Controleur de Cible

    J'aimerais savoir s'il existe des modèles de GUI (au sens Génie Logiciel ou même Design Pattern) tout faits pour gérer ce type de GUI finalement classiques pour de nombreuses simulations. Par défaut j'aurais eu tendance à faire du M-VC jusqu'au bout : chaque Spot recoit des messages d'actualisation de sa Cible et chaque Spot peut contrôler sa Cible, mais je vois au moins 2 pbs :
    1) je crains que ce ne soit trop gourmand en ressources (il va y avoir plein d'échanges de messages pour chaque Cible, ne serait ce que pour actualiser leur positions à chaque pas de temps)
    2) d'un point de vue conceptuel je trouve qu'il n'est pas logique qu'une Cible puisse avoir sa propre Vue (Spot) alors qu'en pratique cette Vue n'existe pas sans la Vue EcranRadar. Plus précisement, la Vue Spot n'existe même que dans la Vue EcranRadar, donc j'aurais tendance à vouloir tout centraliser dans cette dernière.

    D'avance merci de vos conseils, remarques.

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Euh, pour faire des animations mieux vaut éviter de passer par des JLabel mais plutôt dessiner directement la formùe de la cible sur un JPanel, stocker les cibles dans une arraylist (penser à faire une méthode contains pour ton objet cible) puis ajouter un mouselistener au panel, quand un clic se produit sur le panel, tu scanne ta liste de cibles, récupère celle qui correspond à l'endroit du clic, puis tu fais ce que tu veux sur la cible.

    Au final mieux vaut ça qu'un JLabel qui est un composant qui se prête peu aux animations et un peu lourd pour ce que tu veux réaliser, et puis pour les collisions (deux cibles qui se chevauchent amuse toi pour le rendu).

    Donc ta classe Spot contenant une Shape que tu dessine sur ton JPanel au moyen de la méthode paintComponent de celui ci.

    Sinon pour les pattern rensigne toi sur le presentation model qui a le vent en poupe pour les applis swing:

    http://www.martinfowler.com/eaaDev/P...tionModel.html
    http://leepoint.net/notes-java/GUI/s...ion-model.html
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par sinok
    Au final mieux vaut ça qu'un JLabel qui est un composant qui se prête peu aux animations et un peu lourd pour ce que tu veux réaliser
    Je pensais au contraire que les JLabel étaient super light, mais je connais pas du tout le détail de l'implémentation. Pour ma culture, tu pourrais me dire pourquoi les JLabel sont lourds, et aussi comment tu fais globalement pour savoir ce genre de détails.

    Citation Envoyé par sinok
    et puis pour les collisions (deux cibles qui se chevauchent amuse toi pour le rendu)
    De ce côté là, j'ai pas l'impression qu'il y'ait de problèmes puisque tout se passe en tout cas comme je l'imaginais : la cible sur le JLabel le plus haut passe au dessus de l'autre cible.

    Merci pour les exemples de Design Pattern, je vais regarder ça de plus près.

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    On va dire que pour l'affichage les JLabel vont vérifier les infos voules dans le look&feel,, mettre à jour leurs propriétés, propager lesq actions aux divers listeners, se repreindre en fonction des delegates, donc réaliser beaucoup plus d'action qu'un simple drawImage ou drawRectangle utilisé sur les graphics de ton JPanel...

    Ca fait beaucoup de chose à réaliser toutes le x millisecondes ce qui commence à peser un peu alors qu'au final tu as juste une image ou une forme à dessiner tu risques d'avoir des problèmes de fluidité.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

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