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 :

Scroll sur un JPanel trop lent


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 79
    Par défaut Scroll sur un JPanel trop lent
    Bonjour à tous
    Voila j'ai un panel que j'ai mis dans un JScrollPane. Je dessine sur le Jpanel avec la méthode paintComponent de mon JPanel. Quand je scroll le panel se redessinne à chaque fois ce qui fait que le scroll est super lent. Déjà que pour afficher une fois tous les élements sur le Panel ca prend du temps... comment faire un scroll rapide ?

    Merci

  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
    Sans le code de la méthode paintComponent que tu as redéfinie on ne pourra pas t'aider...
    Désolé mais la divinitaion ne fait pas partie de mes super pouvoirs...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 79
    Par défaut
    Voila le code:
    Ma fonction main:

    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
     
    public static void main(String[] args) {
     
    		View tnv=new View(tnm);
    		JFrame fenetre=new JFrame("Titre");
    		fenetre.setPreferredSize(new Dimension(800,600));
     
    		JScrollPane jsp=new JScrollPane(tnv,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    		JScrollPane jScrollPane=new JScrollPane(tnv);
     
    		fenetre.setBackground(Color.WHITE);
    		fenetre.getContentPane().add(jScrollPane);
    		fenetre.pack();
    		fenetre.setVisible(true);
    	}
    Et donc le panel avec la fonction drawComponent ou je fais dedans tout un tas de Linde2D, de clip...
    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
     
    public class View extends JPanel {
     
    	public View(ThermiqueNucleaireModel model)
    	{
    		super();
    		this.setBackground(Color.WHITE);
    		this.setPreferredSize(new Dimension(2048,2048));
    		this.model=model;
    	}
     
    	public void paintComponent(Graphics g)
    	{
    		super.paintComponents(g);
     
    		Graphics2D g2d=(Graphics2D) g ;
     
    		ArrayList<Bo> centrales=model.getAll();
    		Iterator<Bo>iter=centrales.iterator();
    		int i=0;
     
    		while(iter.hasNext()){
    			Bo centrale=(Bo)iter.next();
    			Courbe courbe=new Courbe(g2d,centrale,...);
    			courbe.draw();
    			i++;
    		}
     
    	}
     
    }
    Et donc mon soucis, quand je scroll c'est que tout est redesinner et donc scroller prend énormement de temps. comment faire ?

  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
    Préparer une BufferedImage (grosso merdo un buffer) sur laquelle tu dessines toute tes courbes puis dessiner l'image sur ton JPanel. Et ne mettre a jour l'image que si besoin est (changement de de données & cie).

    Ainsi le code du paintComponent sera simplissime et relativement rapide

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 79
    Par défaut
    J'ai trouvé a solution tout seul. Je fais du double buffering comme indiqué dans la faq. Car les élements dessinés ne sont modifiés, je dessinne tout dans un buffer.
    La méthode paintComponent devient alors:
    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
     
    	public void paintComponent(Graphics g)
    	{
    		super.paintComponents(g);
    		System.out.println("paintComponent");
     
    		if(image==null)
    		{
    			// Je crée le buffer et dessine dedans
    			image=createImage(2048,2048*2);
    			Graphics2D g2d=(Graphics2D)image.getGraphics();
     
    			// Tous les drawLine que je veux
    		}
     
    	    // finalement, le buffer mémoire est dessiné dans le buffer d'affichage
    	    g.drawImage(image, 0, 0, this);
    	}
    En espérant que ca puisse aider quelqu'un.

  6. #6
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Est-ce que tu ne dessine que ce qui est dans le clip rectangle pour commencer ?

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/01/2015, 15h04
  2. [XL-2007] Fichier trop lent : 1048576 lignes sur 5000 utilisées
    Par Ced17 dans le forum Excel
    Réponses: 7
    Dernier message: 22/12/2014, 15h44
  3. Code trop lent pour une écriture sur disque
    Par Anarchy64 dans le forum C
    Réponses: 6
    Dernier message: 12/12/2013, 19h54
  4. [2.x] Site trop lent sur un mutualisé OVH, html statique ?
    Par Corei7 dans le forum Symfony
    Réponses: 9
    Dernier message: 24/12/2012, 15h47
  5. Rafraichissement JPanel trop lent
    Par Risike dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 24/07/2007, 17h23

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