10
votes

Faites défiler par programme une table SWT horizontalement

Question similaire , mais pas exactement la même chose.

table.showcolumn () est utile, mais le défilement n'a que la granularité de la largeur de la colonne. Mais je veux un contrôle plus précis de l'emplacement de défilement.

Considérez le cas d'utilisation suivant. J'ai deux tables que je connais sont de la même largeur et j'ai les mêmes largeurs de colonne. Et je souhaite mettre en œuvre une sorte de synchroniseur de défilement afin que lorsque l'utilisateur défile une table (horizontalement), l'autre table fait défiler le même emplacement.

EDIT:

sur le forum Eclipse Il semble y avoir le même question et certaines idées de travail, mais aucune résolution.

EDIT: J'ai découvert ce comportement sur Windows


1 commentaires

Avez-vous trouvé la solution?


3 Réponses :


4
votes

J'ai bien peur que je ne puisse pas obtenir un résultat satisfaisant dans Windows Vista / 7 soit, c'est que je sentais que je me rappelais.

Je pense que vous devrez saisir la barre de défilement horizontal S à l'aide de TABLE.GETHORIZONTALBAR () . Ensuite, vous pouvez spécifier scrollbar.setselection () pour le faire passer à une position spécifiée.

C'est là que je suis coincé. D'une manière ou une fois, vous devez notifier soit la table ou la barre de défilement que la valeur a changé. J'ai tout essayé de update () à notifylistener () , mais pas de dés. Il semble que c'est simplement une question de mise en place, mais mise en page () n'a aucun effet, non plus.

Incidemment, gardez à l'esprit que le parent Scrollbar s parent (type défilable ) n'est pas un défiléCosite comme je l'avais attendu, mais est en fait la table elle-même.

J'espère que cela vous donne quelques idées et vous aide à trouver une solution. Si oui, laissez-moi savoir, car cela me dérange maintenant maintenant!


4 commentaires

Je ne pense pas que la mise à jour () ou la mise en page () va travailler. Il me semble que Sselection () ne fait que bouger le pouce et non rien sur la table. Cela semble certainement comme une faille de conception, mais je me demande ce que nous pouvons faire à ce sujet.


Je suis d'accord. C'est pourquoi j'essayais d'exécuter un notifylistener () , dans l'espoir que je pourrais tromper la barre de défilement dans la mise à jour de la position horizontale de la table en fonction de la "sélection" du pouce. Pas de dé. Il convient de noter que, en modifiant la sélection, le décalage de défilement devient foiré: vous pouvez ensuite faire défiler les limites de la table. Très étrange en effet. Peut-être poster un rapport de bogue sur SWT?


C'est un peu un coup long, mais peut-être simuler un événement de souris à une position pourrait faire cela? Ne devrait pas être trop difficile pour obtenir la taille de la table et partir de là.


Cliquez physiquement en cliquant sur la barre de défilement, est traitée à un niveau différent de Java ou SWT. L'envoi d'un événement de souris ne provoquera qu'une notification sur la barre de défilement ; Il ne passera pas réellement là-bas là-bas à moins que vous n'ayez vos mains sabulées avec JNI / JNA. Si vous êtes en panne de cette rue, vous pourriez également simplement écrire le code natif pour mettre à jour la barre de défilement manuellement au lieu d'essayer de "cliquer".



1
votes

avoir piqué dans la source de défilement Un peu, on dirait qu'il existe de nombreux bugs (Windows) qui ont été surmontés à un point ou à un autre. Cela peut être un autre, bien que vous n'ayez pas mentionné votre système d'exploitation, ni Paul, il est donc difficile de dire.

Tous les fonctions "Modifier la position de la barre de défilement" finissent par appeler Setscrollinfo qui est package privé. Je soupçonne que l'intention est que cela met à jour réellement les choses comme vous le souhaitez.

Aucune de cela résout votre problème. Heureusement, la même source suggère également une solution:

curseur.

Vous devez réilembler tout le comportement de la barre de défilement dans le curseur, mais une fois terminé, celui-ci doit vous donner le contrôle (HAR) que vous voulez. Avec un peu de chance. OTOH, vous pouvez rencontrer exactement le même bogue OS (si vous le souhaitez) et être de retour à la case carrée.

À ce moment-là, vous l'enregistrez définitivement en tant que bogue Eclipse UI.

PS: Avez-vous cherché le Eclipse Bugzilla pour quelque chose de similaire? Poker autour d'un peu tourné Ce bogue lié ​​à la barre de défilement étant sorties de synchronisation avec une vue d'arborescence dans le navigateur (sur PC Linux-motif, mais fonctionne bien dans Windows). Je soupçonne que vous trouverez des problèmes similaires si vous creusez un peu plus.


0 commentaires