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

2D Java Discussion :

Dessin JPanel surchargé


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut Dessin JPanel surchargé
    Bonjour,

    Alors comment l'expliquer simplement celui la

    j'ai implémenté un composant Cellule (n'héritant de rien), relié a un component (en fait le container servant a afficher ma cellule).

    grace a ce container, j'arrive a déterminer quand la souris rentre, sort, bouge etc dans ma cellule, donc j'ai définis un addMouseMotionListener et un addMouseListener sur ma cellule. comme ca je localise plus finement.

    dans la methode paint de ma cellule (cette méthode sera appelé dans le paint du component contenant ma cellule), je dessine, un ou 2 rectangle, un string, une ou 2 images, etc...bref rien de bien mechant (tout ca sur 100 x 100 pixels, pour donner une idée). A tout ca j'applique un affine transform pour zoomer la cellule.

    bref voila pour ma cellule, en gros un objet qui dessine un rectangle dont la taille peut varier si on le paramètre pour que ca varie et auquel on peut s'abonner aux evenements souris.

    ensuite dans un JPanel, je décide de dessiner une de mes cellules, donc je redefini le paint en appelant le paint de ma cellule
    result...paf nickel ca marche

    j'ajoute les mouse listener qu'il faut a ma cellule, et je decide que quand la souris rentre dedans (la cellule) , je fais varier l'echelle pour le zoom (plus on s'approche du centre plus c'est gros, jusqu'a 2 fois la taille initiale). Ca rend un peu comme l'effet du Dock sous mac OS.

    a l'affichage ca marche nickel...

    bref ca marche bien, je rajoute une autre cellule pour voir le comportement, ca marche bien, 8 cellules aussi, 100 ca commence a ralentir, 400 ca zoom plus vraiment, faut vraiment bouger la souris tres lentement.

    donc c'est trop lent, et j'aimerais savoir si y a pas une technique algorithmique pour calculer tout ca plus vite.

    parce qu'en gros j'ai 400 cellules qui ont toutes les evenements sur la souris...
    et quand une cellule capte le bon evenement, bah elle appele la updateUI du JPanel.

    la methode paint du JPanel elle, boucle sur le tableau de cellule et appele le paint de chacune. Je l'ai mis en doubleBuffered, mais ca reste trop lent.

    une idée ?

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 110
    Par défaut
    ta cellule devrait etre un truc du genre :

    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
     
    class Cellule extends JComponent{
     
     
    public Cellule(){
     
      this.addMouseMotionListener( new MouseMotionListener(){
     
     //les methodes dont je sais plus exactement le nom
      public void mouseMoved(MouseEvent m){
        //calcul pour l'affichage
        revalidate(); // et/ou un repaint();    
      }
     
    });
     
     
    }
     
     
    public void paint(Graphics g){
     //le dessin de tes machins
    }
    et tu ajoutes ta cellule comme si c'était un label dans ton panneau. tu evites de tout redessiner comme ca.

  3. #3
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    je vais essayer ca...
    donc toi en gros tu préconises de redessiner ma cellule, qui desormais sera un component, a l'event meme.

    Donc dans le paint du panel, je mets rien.
    il suffit juste de faire panel.add(cellule) et basta ? c'est ca ?

  4. #4
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 110
    Par défaut
    oui c'est ca

  5. #5
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    Citation Envoyé par eclesia Voir le message
    oui c'est ca
    t'as vu ca je comprends vite, donc j'essai ca ce soir dans le train

    mais j'ai peur qu'avec moulte component ca soit lourd sur un principe de mémoire cette fois

  6. #6
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    bah ca marche pas comme je veux

    deja j'ai bcp de mal a redimensioner mon parent (le JComponent dont j'herite) tout du moins j'ai du mal a le faire apparaitre a l'ecran avec les nouvelles dimesion (celles du zoom)

    je garde le meme principe j'adapte les dimensions de ma cellule en fonction du rectangle auquel j'ai fait les transformation (affineTransform)

    on voit que ca bouge a l'interieur, mais les bords du component, eux, restent statiques.

    et en mettant 400 ca a vite figé...donc c'est ptet pire, mais bon deja j'essaie de bien faire avec un cellule avant de juger sur 400

Discussions similaires

  1. [Débutant]Jpanel et dessin de composants
    Par frabill dans le forum 2D
    Réponses: 3
    Dernier message: 16/02/2006, 19h00
  2. Dessiner dans différents JPanels
    Par N@sH dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 20/05/2005, 15h39
  3. [Dessin JPanel] Generer dessin pas a pas
    Par -=Spoon=- dans le forum 2D
    Réponses: 2
    Dernier message: 03/12/2004, 22h41
  4. Dessiner dans un JPanel
    Par Oliveuh dans le forum Composants
    Réponses: 5
    Dernier message: 19/07/2004, 12h13
  5. dessiner le contour d'un jpanel
    Par iamspacy dans le forum Composants
    Réponses: 4
    Dernier message: 11/05/2004, 15h11

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