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 =)
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)
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(); } }
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
Partager