Bonjour à tous,
J'ai une classe dérivée de JComponent qui dessine dans son espace client des formes géométriques simples en utilisant les méthodes fill() et draw() de Graphics2D sur des classes implémentant java.awt.Shape (des rectangles et des polygones) dans sa méthode paintComponent().
Quand je mets ce composant dans un JScrollPane, tout marche parfaitement sans que j'ai eu à implémenter Scrollable. Je suis parfaitement statisfait du comportement à ce niveau là.
Par la suite, j'ai voulu ajouter une fonctionnalité de zoom. J'ai donc pensé à utiliser la classe AffineTransform et sa méthode scale().
J'ai naïvement ajouté un appel à Graphics2D.setTranform() dans la méthode paintComponent() de ma classe comme ceci :
Dès lors le dessin est bien zoomé par le facteur choisi, mais j'ai des problèmes :
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@Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D)g; g2d.setTransform(affineTransform); // Dessin du fond du composant g2d.setColor(Color.WHITE); g2d.fillRect(0, 0, getWidth(), getHeight()); g2d.setColor(Color.BLACK); // dessin des formes géométriques à l'intérieur // NB : la classe CanvasItem encapsule une shape avec // quelques infos supplémentaires. for (CanvasItem item : canvas.getItems()) { item.paint(g2d); } }
1. Apparement, les scrollbars sont calculées d'après la taille du composant avant le zoom.
2. Le défilement ne se fait plus lorsque je déplace mes scrollbars.
Je m'y prends donc visiblement de travers. Quelqu'un pourrait-il m'indiquer comment m'y prendre ?
Bien à vous,
Niark13.









Répondre avec citation


Partager