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

SWT/JFace Java Discussion :

Problème d'affichage ProgressBar dans un TreeViewer


Sujet :

SWT/JFace Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 26
    Points : 22
    Points
    22
    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 : 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
    		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 : 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
    		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é.

  2. #2
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    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 800
    Points : 3 919
    Points
    3 919
    Par défaut
    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.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 26
    Points : 22
    Points
    22
    Par défaut
    Voilà! Merci de l'attention porter à mon message!
    Images attachées Images attachées  

  4. #4
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    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 800
    Points : 3 919
    Points
    3 919
    Par défaut
    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.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 26
    Points : 22
    Points
    22
    Par défaut
    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 : 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
    		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?

Discussions similaires

  1. [Custom Control] Comment résoudre un problème d'affichage uniquement dans Blend ?
    Par choas dans le forum Windows Presentation Foundation
    Réponses: 15
    Dernier message: 29/09/2008, 12h23
  2. Réponses: 5
    Dernier message: 14/06/2008, 08h32
  3. Réponses: 2
    Dernier message: 25/02/2008, 08h35
  4. [Tableaux] problème d'affichage visuel dans fenêtre
    Par kitty2006 dans le forum Langage
    Réponses: 2
    Dernier message: 19/09/2006, 17h23
  5. [FLASH 8] Problème d'affichage flash dans ie
    Par ph_anrys dans le forum Flash
    Réponses: 5
    Dernier message: 22/02/2006, 14h58

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