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 07/12/2012, 11h36   #1
GouiTPT
Invité régulier
 
Homme
Ingénieur en apprentissage
Inscription : août 2012
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur en apprentissage
Secteur : Industrie

Informations forums :
Inscription : août 2012
Messages : 12
Points : 8
Points : 8
Par défaut TableViewer changement de sélection

Bonjour tout le monde,

J'ai un petit souci et j'aurais besoin d'aide.

J'ai un tableviewer dans un Master/Details block. Dans ma master part beaucoup de nouveaux items l'updatent très rapidement. Mes detail pages affichent les infos de l'item sélectionné. J'aimerais que celles-ci soient persistantes et notifiées seulement en cas de changement de sélection.

Mon problème est que quand un nouvel item est ajouté au tableviewer, la sélection change automatiquement.

Des idées ?
Merci
GouiTPT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2012, 14h02   #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,

Peux-tu nous donner la façon dont tu affiches la partie details? Ainsi que la façon dont tu mets à jour ton Viewer d'ailleurs.

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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2012, 14h22   #3
GouiTPT
Invité régulier
 
Homme
Ingénieur en apprentissage
Inscription : août 2012
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur en apprentissage
Secteur : Industrie

Informations forums :
Inscription : août 2012
Messages : 12
Points : 8
Points : 8
J'ai une classe Observable qui détient une liste d'évènements qui me sert de modèle. Plusieurs handlers ajoutent des évènements à cette liste de façon synchronisée.

Le ContentProvider du TableViewer se sert de cette liste.
Code :
1
2
3
4
5
6
@Override
public Object[] getElements(Object inputElement) {
     if (inputElement instanceof IDicoMessageEvent)
          return ((IDicoMessageEvent)inputElement).getMsgEventsArray();
     return new Object[0];
}
La classe Observable notifie ses Observers une fois la liste mise à jour.
Le Master/Details block est un de ces Observer.

Lorsque la sélection change :
Code :
1
2
3
4
5
_eventTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
         @Override
         public void selectionChanged(SelectionChangedEvent event) {
              managedForm.fireSelectionChanged(spart, event.getSelection());
});
Les details pages sont bien registered.

Le souci se situe au niveau du TableViewer. Lorsque je sélectionne un event et qu'un autre est ajouté, la sélection change car elle reste sur la même ligne.
GouiTPT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2012, 14h54   #4
GouiTPT
Invité régulier
 
Homme
Ingénieur en apprentissage
Inscription : août 2012
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur en apprentissage
Secteur : Industrie

Informations forums :
Inscription : août 2012
Messages : 12
Points : 8
Points : 8
Cela vient du fait que mon TableViewer est SWT.VIRTUAL. Donc la sélection se fait sur l'index dans la table.
Si j'enlève l'option SWT.VIRTUAL la sélection reste sur l'élément que j'ai sélectionné.

Mais le problème c'est que mon TableViewer DOIT rester SWT.VIRTUAL parce qu'il contient tellement de données que les stocker de façon non virtuelle fait chuter grandement les performances de mon application.

Personne n'a jamais été confronté à ce problème ?
GouiTPT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2012, 12h37   #5
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,

Tu peux modifier ton ContentProvider. Dans la méthode inputChanged(), tu peux récupérer la sélection courante pour la remettre une fois la mise à jour finie.

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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2012, 14h05   #6
GouiTPT
Invité régulier
 
Homme
Ingénieur en apprentissage
Inscription : août 2012
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur en apprentissage
Secteur : Industrie

Informations forums :
Inscription : août 2012
Messages : 12
Points : 8
Points : 8
Bonjour,

Merci pour ta réponse. Malheureusement la méthode inputChanged() n'est appelée que lors de l'exécution des méthodes suivantes :
setInput(), setContentProvider() et dispose().
J'ai donc récupéré le ContentProvider pour l'appeler.

Mais je souhaite agir sur ma sélection au moment de la mise à jour avant que la sélection ne change toute seule sinon j'ai 2 changements de sélection ce qui est encore pire.
GouiTPT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 14h05   #7
GouiTPT
Invité régulier
 
Homme
Ingénieur en apprentissage
Inscription : août 2012
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur en apprentissage
Secteur : Industrie

Informations forums :
Inscription : août 2012
Messages : 12
Points : 8
Points : 8
Bug eclipse :
https://bugs.eclipse.org/bugs/show_bug.cgi?id=396604
GouiTPT est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h46.


 
 
 
 
Partenaires

Hébergement Web