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 :

[JScrollPane] pb "brouillage" dessin avec scroll dans JPanel


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 43
    Points : 52
    Points
    52
    Par défaut [JScrollPane] pb "brouillage" dessin avec scroll dans JPanel
    Bonjour à tous,

    Voila : je cherche a afficher un dessin dans un JPanel avec un scroll. J'ai écrit du code qui me permet cela, mais comme je suis perfectioniste, je voudrais remédier a un effet graphique indésirable. Lorsque l'on scroll, des lignes de pixels viennent "brouiller" le dessin. J'ai ajouté un repaint() sur l'événement de relachement du bouton de la souris après le scroll, aussi le dessin est a la fin du scroll correct. Néanmoins pendant le scroll l'image est "brouillée" : en pièce jointe, j'ai mis 3 image d'environ 4 ko chacune pour illustrer mon propos.

    Quelqu'un aurait-il une solution ou même une piste pour palier a ce problème ?

    Voici le code que j'utilise (je sais que le code n'est pas académique, mais c'est juste un test) :

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    public class MyJPanel extends JPanel {
    	public void paint(Graphics g) {
    		g.setColor(Color.RED);
    		g.fillRect(0,0,100,100);
    		g.setColor(Color.BLUE);
    		g.fillOval(150,50,380,380);
    		g.drawLine(10, 1, 10, 99);
    		g.setFont(new Font("TimesRoman", Font.BOLD ,15));
    		g.drawString("coucou", 10, 10);
    	}
    }
     
    public class Demo {
    	public static JFrame frame;
     
    	public static void main(String[] args) {
    		frame = new JFrame("test");
    		MyJPanel jc = new MyJPanel();
    		JScrollPane jsp = new JScrollPane(jc);
     
    		jc.setPreferredSize(new Dimension(600,500));
    		jc.setMinimumSize(new Dimension(600,500));
    		jc.setMaximumSize(new Dimension(600,500));
     
    		frame.setPreferredSize(new Dimension(200,200));
    		frame.setMinimumSize(new Dimension(200,200));
    		frame.setMaximumSize(new Dimension(200,200));
     
    		WindowAdapter wa = new WindowAdapter() {
    			public void windowClosing(WindowEvent e) {
    				System.exit(0);
    			}
    		};
    		frame.addWindowListener(wa);
     
    		jsp.getHorizontalScrollBar().addMouseListener(new MyActionListener());
    		jsp.getVerticalScrollBar().addMouseListener(new MyActionListener());
     
    		frame.getContentPane().add(jsp);
     
    		frame.pack();
    		frame.setVisible(true);
     
    	}
     
     
    }
     
     
    	class MyActionListener implements MouseListener {
    		public void mouseExited(MouseEvent event) {
    			System.out.println("mouseExited");
    		}
    		public void mouseEntered(MouseEvent event) {
    			System.out.println("mouseEntered");
    		}
    		public void mouseClicked(MouseEvent event) {
    			System.out.println("mouseClicked");
    		}
    		public void mouseReleased(MouseEvent event) {
    			System.out.println("mouseReleased");
    			Demo.frame.repaint();
    		}
    		public void mousePressed(MouseEvent event) {
    			System.out.println("mousePressed");
    		}
    	}
    Images attachées Images attachées    

  2. #2
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Tu n'as pas besoin d'appeler repaint(), le JScrollPane le fait pour toi. Par contre, utilise paintComponent à la place de paint() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class MyJPanel extends JPanel {
      public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.RED);
        ....
      }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Dessin avec Scrolling (SWING)
    Par Elwe31 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 22/10/2008, 11h41

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