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

AWT/Swing Java Discussion :

mon affichage graphique c tout caca, comment je peux utiliser GeneralPath


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de poulette3000
    Profil pro
    Inscrit en
    Août 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 183
    Par défaut mon affichage graphique c tout caca, comment je peux utiliser GeneralPath
    Bonjour


    J'enregistre des DrawLine de couleur dans une listeShape, mais comme y en a bcp, ça peut planter...
    Voila, en fait il y a bcp bcp trop de drawline je peux en avoir 10 000, et je les enregistre tous dans une <List> Shape comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // 2 conditions nécessaires à l'affichage la pause et le bouton refresh juin/07
    if (app.getPanneauBoutons().getIsPause() && app.getFenetreGraphe().getEtatRafraichir())
    { 
      for(FormeColoree shape3  :  listeGraphique1) {
        //On dessine la forme
       shape3.dessiner(g2d);
    }
      for(FormeColoree shape4  :  listeGraphique2) {
    //On dessine la forme
    	       shape4.dessiner(g2d);
    	    		}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    g2d.drawLine(abcisseEnCours2-1+x, tab_coor[indiceTab2-(int)pas][i][0], abcisseEnCours2+x, tab_coor[indiceTab2][i][0]);
    FormeColoree shape3 = new FormeColoree(new Line2D.Double(abcisseEnCours2-1+x, tab_coor[indiceTab2-(int)pas][i][0], abcisseEnCours2+x, tab_coor[indiceTab2][i][0]) , g2d.getColor());
    listeGraphique1.add(shape3);
    La c'est la definition des elements de type FormeColorée inspirée de Sinok
    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
    public class FormeColoree {
     
        private Shape shape;
        private Color color;
        /**
         * @param shape
         * @param color
         */
        public FormeColoree(Shape shape, Color color) {
            this.shape = shape;
            this.color = color;
        }
        /**
         * @return color
         */
        public Color getColor() {
            return color;
        }
        /**
         * @param color color à définir
         */
        public void setColor(Color color) {
            this.color = color;
        }
        /**
         * @return shape
         */
        public Shape getShape() {
            return shape;
        }
        /**
         * @param shape shape à définir
         */
        public void setShape(Shape shape) {
            this.shape = shape;
        }
     
        public void dessiner(Graphics2D g2d) {
            g2d.setPaint(color);
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g2d.draw(shape);
        }
        public void addFormeEtCouleur(Graphics2D g2d, Shape s, Color c){
        	g2d.setPaint(color);
            g2d.draw(shape);
        }
    Si j'ai une liste trop trop importante, le pb c 'est que l'affichage graphique decede trop longtemps puis rescusite ...


    et D'un penser vous que GeneralPath me fera gagner du temps en concatenant tous les DrawLine ?

    et de deux Si oui comment dois je m'y prendre par rapport à ma classe "FormeColoree" ?

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Pour le 1), il faut voir, pour le 2), bah ça va pas trop être possible (en effet un GeneralPath est une Shape, et on n'applique pas la couleur sur une shape).

    Par contre tu pourrais éventuellement faire un GeneralPath par Couleur de dessin: suivant qu'une ligne doit avoir telle ou telle couleur, tu l'ajoute à tel ou tel GeneralPath, puiss tu dessines les GeneralPath.

    De plus tu peux garder la classe FormeColorée (en effet, un GeneralPath est une Shape).

    Ensuite pour ajouter une Ligne à un GeneralPath il faut procéder de la manière suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int x1 = 0;
    int y1 = 0;
    int x2 = 100;
    int y2 = 100;
    GeneralPath path = new GeneralPath();
    path.moveTo(x1,x2);
    path.lineTo(y1,y2);
    ++

  3. #3
    Membre confirmé Avatar de poulette3000
    Profil pro
    Inscrit en
    Août 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 183
    Par défaut
    alors tu penseras pas que ça accelerera le l'affichage graphique
    parce que des fois avec mes shapes j'ai droit à
    Exception in thread "AWT-EventQueue-1" java.lang.OutOfMemoryError: Java heap space

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Au niveau perf pure je sidrais probablement non, car quand on fait un Graphics2D#draw(Shape s), les graphics vont utiliser le pathIterator de tra Shape pour faire le dessine.

    Et comme ton GeneralPath sera composé de multiples lineTo, tu auras toujours autant d'opérations derrière (une par ligne).


    Ton problème vient plutôt du nombre d'objets que tu cherches à afficher. Donc pour celà tu pourrais fouiller dans ce sens:

    1. Vérifier que l'élément que tu vas dessiner apparaît bien à l'écran (à toi de gérer tes coordonnées).
    2. Jouer sur le Clip de tes Graphics (revient plus ou moins au point précédent, mais en différent tout de même).
    De toute façon il fat tjours faire attention à limiter le nombre d'instanciations d'objets au minimum, donc au final utiliser des GeneralPath aura quand même un avantage: Limiter le nombre d'objet créés.

  5. #5
    Membre confirmé Avatar de poulette3000
    Profil pro
    Inscrit en
    Août 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 183
    Par défaut
    ok

  6. #6
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    En tous cas, j'aime beaucoup la poésie du titre

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/01/2011, 19h37
  2. comment connaitre le temps que met mon affichage graphique ?
    Par poulette3000 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 14/06/2007, 16h21
  3. Comment je peux utiliser Findnext FindFirst
    Par zizo89 dans le forum Delphi
    Réponses: 5
    Dernier message: 17/05/2007, 16h19
  4. Comment je peux utiliser ma connexion
    Par Maria1505 dans le forum Matériel
    Réponses: 1
    Dernier message: 17/11/2006, 15h04
  5. Réponses: 1
    Dernier message: 11/10/2006, 14h24

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