Précédent   Forum du club des développeurs et IT Pro > Java > Interfaces Graphiques en Java > SWT/JFace
SWT/JFace Forum d'entraide pour les API SWT/JFace. Avant de poster -> FAQ SWT/JFace
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 14/07/2012, 18h41   #1
maxi297
Candidat au titre de Membre du Club
 
Homme Maxime
Étudiant
Inscription : janvier 2012
Messages : 26
Détails du profil
Informations personnelles :
Nom : Homme Maxime
Localisation : Canada

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 26
Points : 10
Points : 10
Par défaut Problème d'affichage ProgressBar dans un TreeViewer

Bonjour à tous,
j'ai un petit problème lors de l'affichage d'un ProgressBar dans mon TreeViewer: cela crée un espace blanc derrière. J'utilise ce snippet : http://dev.eclipse.org/viewcvs/viewv...va?view=markup
J'obtiens ce résultat:

Ce qui me dérange, c'est le blanc derrière lorsque la rangé est sélectionnée. Les rangés où il n'y a pas de progress bar sont correctes.
Code où j'inclus l'information pour mes colonnes:
Code :
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
		columnDataList[1] = new ColumnData("Progress", 175, SWT.LEFT, "Progress of the scnenarios",
				new CellLabelProvider() {			 		
				 	public void update(ViewerCell cell) {
				 		if(progressBar){
				 		if(cell.getElement() instanceof ScenarioNode && 
				 				((ScenarioNode)cell.getElement()).getParent() instanceof ScenarioNode
				 				&& ((ScenarioNode)cell.getElement()).getProgressBar() == null){
					 		final TreeItem item = (TreeItem) cell.getItem();
					 		DisposeListener listener = new DisposeListener() {
 
					 			public void widgetDisposed(DisposeEvent e) {
					 				if( item.getData("EDITOR") != null ) {
					 					TreeEditor editor = (TreeEditor) item.getData("EDITOR");
					 					editor.getEditor().dispose();
					 					editor.dispose();
					 				}
					 			}
 
					 		};
 
							if (item.getData("EDITOR") != null) {
								TreeEditor editor = (TreeEditor) item.getData("EDITOR");
						 		editor.getEditor().dispose();
						 		editor.dispose();
							}
 
							if( item.getData("DISPOSELISTNER") != null ) {
								item.removeDisposeListener((DisposeListener) item.getData("DISPOSELISTNER"));
							}
 
							TreeEditor editor = new TreeEditor(item.getParent());
						 	item.setData("EDITOR", editor);
						 	Composite comp = new Composite(item.getParent(), SWT.NONE);
						 	comp.setBackground(item.getParent().getBackground());
						 	comp.setBackgroundMode(SWT.INHERIT_DEFAULT);
						 	RowLayout l = new RowLayout();
							l.marginHeight = 0;
						 	l.marginWidth = 0;
						 	l.marginTop = 0;
						 	l.marginBottom = 0;
						 	comp.setLayout(l);
 
							final ProgressBar progressBar = new ProgressBar(comp, SWT.HORIZONTAL);
							progressBar.setMinimum(0);
							progressBar.setMaximum(((((ScenarioNode) ((ScenarioNode)cell.getElement()).getParent()).getTotalNbEvents())));
							progressBar.setSelection((int) (((ScenarioNode) cell.getElement()).getNbEvents()));
							((ScenarioNode) cell.getElement()).setProgressBar(progressBar);
 
						 	editor.grabHorizontal = true;
						 	editor.setEditor(comp, item, 1);
 
						 	item.addDisposeListener(listener);
						 	item.setData("DISPOSELISTNER",listener);
				 		} else if(cell.getElement() instanceof ScenarioNode && 
				 				((ScenarioNode)cell.getElement()).getParent() instanceof ScenarioNode
				 				&& ((ScenarioNode)cell.getElement()).getProgressBar() != null){
				 			((ScenarioNode) cell.getElement()).getProgressBar().setSelection(((ScenarioNode) cell.getElement()).filtersCounter);		 			
				 		} else {
				 			cell.setText("");
				 		}
				 	}
				 	}
 
			 	} ,null, null);
Code où je construis mes colonnes:
Code :
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
		for (final ColumnData columnData : columnDataList) {
			final TreeViewerColumn treeColumn = new TreeViewerColumn(
					viewer, columnData.alignment);
			treeColumn.getColumn().setText(columnData.header);
			treeColumn.getColumn().setWidth(columnData.width);
			treeColumn.getColumn().setToolTipText(columnData.tooltip);
			if (columnData.comparator != null) {
				treeColumn.getColumn().addSelectionListener(
						new SelectionAdapter() {
							@Override
							public void widgetSelected(SelectionEvent e) {
								if (viewer.getTree().getSortDirection() == SWT.UP 
										|| viewer.getTree().getSortColumn() != treeColumn.getColumn()) {
									viewer.setComparator(columnData.comparator);
									viewer.getTree().setSortDirection(SWT.DOWN);
								} else {
									viewer.setComparator(new ViewerComparator() {
										@Override
										public int compare(Viewer viewer, Object e1, Object e2) {
											return -1 * columnData.comparator.compare(viewer, e1, e2);
										}
									});
									viewer.getTree().setSortDirection(SWT.UP);
								}
								viewer.getTree().setSortColumn(
										treeColumn.getColumn());
							}
						});
			}
			if(columnData.labelProvider == null) 
				treeColumn.setLabelProvider(columnData.cellProvider);
			else if (columnData.cellProvider == null) 
				treeColumn.setLabelProvider(columnData.labelProvider);
		}
Si vous avez des idées, si petites soit-elle, n'hésitez pas! Ce sera très apprécié.
maxi297 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2012, 11h38   #2
Gueritarish
Modérateur
 
Avatar de Gueritarish
 
Homme Marc
Développeur Java
Inscription : mai 2007
Messages : 1 567
Détails du profil
Informations personnelles :
Nom : Homme Marc
Âge : 28
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2007
Messages : 1 567
Points : 3 426
Points : 3 426
Salut,

Je ne vois pas ton image (proxy). Peux-tu la mettre en pièce jointe?
Essaye aussi de mettre un background à ta ProgressBar...

Voilà, à+
Gueritarish
__________________
Pas de questions technique par MP, les forums sont là pour ça.

Le 5 et 6 juin à Toulouse, la première EclipseCon France !
Gueritarish est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2012, 18h07   #3
maxi297
Candidat au titre de Membre du Club
 
Homme Maxime
Étudiant
Inscription : janvier 2012
Messages : 26
Détails du profil
Informations personnelles :
Nom : Homme Maxime
Localisation : Canada

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 26
Points : 10
Points : 10
Voilà! Merci de l'attention porter à mon message!
Images attachées
Type de fichier : png progressBarProblem.png (23,7 Ko, 7 affichages)
maxi297 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2012, 13h39   #4
Gueritarish
Modérateur
 
Avatar de Gueritarish
 
Homme Marc
Développeur Java
Inscription : mai 2007
Messages : 1 567
Détails du profil
Informations personnelles :
Nom : Homme Marc
Âge : 28
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2007
Messages : 1 567
Points : 3 426
Points : 3 426
Salut,

C'est juste une question de couleur de fond. Il te suffit de passer la couleur de ton Composite en: SWT.COLOR_LIST_SELECTION et ça devrait faire l'affaire.

Voilà, à+
Gueritarish
__________________
Pas de questions technique par MP, les forums sont là pour ça.

Le 5 et 6 juin à Toulouse, la première EclipseCon France !
Gueritarish est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2012, 21h29   #5
maxi297
Candidat au titre de Membre du Club
 
Homme Maxime
Étudiant
Inscription : janvier 2012
Messages : 26
Détails du profil
Informations personnelles :
Nom : Homme Maxime
Localisation : Canada

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 26
Points : 10
Points : 10
Oui... je me rends compte que j'ai été peu clair. Afin de changer la couleur lorsqu'un région est sélectionnée, j'ai le listener suivant:
Code :
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
		viewer.getTree().addListener(SWT.EraseItem, new Listener() {
			@Override
			public void handleEvent(Event event) {
				if(event.index < 8) {
					if (columnDataList[event.index].percentageProvider != null) {
						TreeObject node = (TreeObject) event.item.getData();
						float percentage = columnDataList[event.index].percentageProvider.
								getPercentage(node);						
						if (percentage == 0) {
							return;
						}
						if ((event.detail & SWT.SELECTED) > 0) {
							Color oldForeground = event.gc.getForeground();
							event.gc.setForeground(event.item.getDisplay()
									.getSystemColor(SWT.COLOR_LIST_SELECTION));
							event.gc.fillRectangle(event.x, event.y, event.width,
									event.height);
							event.gc.setForeground(oldForeground);
							event.detail &= ~SWT.SELECTED;
						}
 
						int barWidth = (int) ((viewer.getTree().getColumn(1)
								.getWidth() - 8) * percentage);
						int oldAlpha = event.gc.getAlpha();
						Color oldForeground = event.gc.getForeground();
						Color oldBackground = event.gc.getBackground();
						System.out.println(event.gc.toString()+event.gc.getDevice().toString()+viewer.getTree().getDisplay().toString());
						event.gc.setAlpha(64);
						event.gc.setForeground(event.item.getDisplay()
								.getSystemColor(SWT.COLOR_BLUE));
						event.gc.setBackground(event.item.getDisplay()
								.getSystemColor(SWT.COLOR_LIST_BACKGROUND));
						event.gc.fillGradientRectangle(event.x, event.y, barWidth,
								event.height, true);
						event.gc.drawRectangle(event.x, event.y, barWidth,
								event.height);
						event.gc.setForeground(oldForeground);
						event.gc.setBackground(oldBackground);
						event.gc.setAlpha(oldAlpha);
						event.detail &= ~SWT.BACKGROUND;
					}
				} else if (event.index == 8){
			 	}
		 	}
		});
Par contre, afin d'utiliser le snippet qui me permet de placer ma progress bar dans le TreeViewer, je crée une nouvelle instance de Composite pour mettre la progress bar à l'intérieur. Ensuite, je voudrais que lorsqu'une certaine région de mon Tree est sélectionnée, que le background de mon composite de ma progress bar change aussi. Comment puis-je y avoir accès?
maxi297 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h51.


 
 
 
 
Partenaires

Hébergement Web