2010-03-16 4 views
1

Bonjour StackOverflow ExpertsSWT TabFolder: Dessin Bizarre Comportement

Description de

J'ai une page SWT avec un TabFolder avec un certain nombre de TabItems créées dynamiquement.

Sur chaque TabItem, créez un Composite et définissez TabItem.setControl() sur l'Composite. J'utilise ensuite ce Composite comme page sur laquelle je dessine mes objets. Je dessine un ensemble de contrôles, y compris des zones de texte et des étiquettes.

Pour la première, onglet Par défaut, cela fonctionne très bien. Pas de problème.

Problème

sur les onglets qui ne sont pas le premier onglet j'ai les problèmes suivants:

  • Je ne peux pas changer visuellement puis Edité/état activé de mes commandes.
  • Je suis incapable de définir visuellement le texte contenu de mes éléments

Mes contrôles regarder les handicapés et un coup d'oeil grisés.

Mais je suis capable de sélectionner le contenu avec ma souris et utiliser CTRL + C pour le copier. Donc le contet du texte est là et ils sont éditables.

Visuellement, il n'est tout simplement pas mis à jour.

Les commentaires sont appréciés, Toutes les demandes de code, des exemples seront fournis et aider Welcommed.

Mises à jour

J'ai essayé ajouté le suggère la boucle de débogage du code, où je tente de permettre à mes contrôles. Ce fut le résultat:

[principal] INFO [dk.viking.controller.LayerController] - f038.stklok est maintenant éditable [true] et a permis [true]

[principal] INFO [dk. viking.controller.LayerController] - vrai texte {}

[principal] INFO [dk.viking.controller.LayerController] - true composite {}

[principal] INFO [dk.viking.controller.LayerController] - true TabFolder {}

[principal] INFO [dk.viking.controller.LayerController] - shell vrai {Viking GUI}

Répondre

0

J'ai trouvé la source du problème.

Le code utilisé pour remplir le composant TabItem avec des contrôles était appelé deux fois.

Tous les contrôles ont donc été dupliqués et notre contrôleur n'avait que des références actives sur la moitié des contrôles réellement utilisés.

Je suis incapable d'expliquer avec précision le comportement de dessin que nous avons vu, mais la suppression de l'un de ces appels a provoqué la disparition du problème.

J'espère que mes problèmes pourront un jour aider quelqu'un d'autre.

1

Je suppose que le TabItem lui-même est désactivé. Je suggère d'ajouter une boucle dans un endroit de votre code qui prend un contrôle de texte et imprime son état d'activation et continue ensuite avec le composite mère et fait la même chose:

Control c = text; 
while (c != null) { 
     System.out.println(c.getEnabled()+" "+c); 
     c = c.getParent(); 
} 

Cela devrait vous donner une idée si cela est la cause de votre problème.Si ce n'est pas le cas, définissez un point d'arrêt au Text.setEditable() et vérifiez qui l'appelle. [EDIT] Si le texte est modifiable mais pas visible (c'est-à-dire gris sur gris), vérifiez les retours getBackground() et getForeground(). Peut-être que quelqu'un a mis les deux à la même couleur.

+0

Mon problème est que je pense que mes contrôles sont en effet modifiables. Je ne pense tout simplement pas que l'interface utilisateur montre ce fait. Je peux marquer le contenu avec ma souris et le copier avec CTRL + C, mais en faisant cela, le contrôle semble toujours désactivé et ne montre jamais le contenu, la souris ou le marquage. C'est simplement, grisé. – JesperGJensen

+0

Ce comportement est le comportement par défaut lorsque vous définissez Editable sur false (la copie fonctionne mais vous ne pouvez pas modifier le texte). Vérifiez qui appelle 'setEditable()'. –

+0

J'ai seulement 1 appel à setEditable (true); dans mon code. Mais ce n'est pas un problème de contenu non éditable. Le contenu n'est pas visible. Je ne vois que l'arrière-plan gris à l'intérieur du TextBox. Il n'y a pas de texte. Le look grisé reste peu importe ce que je fais dans mon code. – JesperGJensen