Bonsoir,

je suis confronté a un problème que je ne sais résoudre malgré les quelques docs que j'ai pu trouver sur le net.

De façon simplifié cela consisterait a dessiner des rectangles dans un GC.

Donc ma démarche est celle-ci:

- Création d'un ScrolledComposite que je place dans le Shell
- Création d'un Canvas que je place dans le ScrolledComposite
- Création d'un Graphical content dans lequel je dessine.

Je joins un code simplifié, vous pouvez l'executer tout devrait marcher normalement. (Du moins vous verrez a quels problèmes je suis confrontés =)

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
68
69
70
71
72
73
74
75
 
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
 
 
public class Test {
 
 
   public static void main(String[] args) {
      Display myDisplay = new Display();
 
      final Shell myShell = new Shell(myDisplay);
      myShell.setSize(myDisplay.getBounds().width,myDisplay.getBounds().height);
      myShell.setText("Essai Canvas in ScrollComposite");
 
      //Creation GridLayout
      GridLayout gridLayout = new GridLayout();
      gridLayout.numColumns = 2;
      gridLayout.numColumns = 2;
      myShell.setLayout(gridLayout);
 
      //Creation GridData
      GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
      gridData.heightHint = myDisplay.getBounds().height-(myDisplay.getBounds().height)/3;
 
      //Creation ScrolledComposite  dans le shell
      ScrolledComposite scrollPanel = new ScrolledComposite(myShell, SWT.BORDER |
    		  SWT.H_SCROLL); 
      scrollPanel.setLayoutData(gridData);
 
      //Creation canvas  dans le ScrolledComposite
      Canvas canvas = new Canvas(scrollPanel, SWT.NONE);
 
      scrollPanel.setLayoutData(gridData);
      scrollPanel.setContent(canvas);
 
      // Je set la taille du Canvas a une valeur Grande. 
      canvas.setSize(myDisplay.getBounds().width+100000, (myDisplay.getBounds().height-(myDisplay.getBounds().height)/3));
      canvas.setLocation(0,0);
 
 
      myShell.open();
 
    //Creation d'un graphical content  dans le canvas
      GC gc = new GC(canvas);
 
 
      // Je dessine des rectangles...
      for (int i = 0; i < 100000; i++) {
    	  Rectangle rectangle = new Rectangle(i*2+10,50,10,15);
          gc.drawRectangle(rectangle);
      }
 
// Je pense que la solution a mon problème devrait se situé ci-dessous mais a mon niveau de 
// connaissance je ne cesse de me casser les dents
//
//      scrollPanel.addPaintListener (new PaintListener() {
//    	    public void paintControl (PaintEvent e) { 	    	
//			      }
//    	    }
//      });
 
      while (!myShell.isDisposed()) {
         if (!myDisplay.readAndDispatch()) myDisplay.sleep();
      }
      myDisplay.dispose(); 
   }
}
Au final la scrollBar parait être en phase avec la taille du Canvas mais lorsque j'essaye de me déplacer tout marche bien sauf que ce qui était dessiner sur le Gc disparaît lorsque je reviens sur la position ou celui était dessiné initialement. (J'ai du mal a m'exprimer mais essaye le code, si tu as un peu de temps, tu comprendra mieux)

D'après mes lecture il faudrait utiliser PaintListener et Paint Event mais les exemples se font rares sur la toile...

Ainsi si l'un d'entre vous connaît un tutorial ou un site internet (Explicite-car Debutant JAVA) afin que je puisse saisir un peu plus le mode de fonctionnement de ces classes qu'il n'hésite pas a me le faire suivre.

Merci d'avance et Bonne soirée