2008-10-02 17 views
1

Je développe un plugin eclipse utilisant une interface SWT. J'ai besoin d'afficher du texte, et dans ce texte il doit y avoir des liens. Les deux seuls widgets que j'ai trouvés qui me permettront d'inclure des liens cliquables dans le texte sont Link et Browser. Le navigateur, cependant, est excessif pour mes besoins, et je ne pouvais pas personnaliser correctement l'apparence de celui-ci. Cela ne laisse que le widget Lien. Le problème est que j'ai besoin que le widget Lien hérite d'un dégradé du Composite dans lequel il se trouve. Il le fait correctement, uniquement quand il est redimensionné ou fait défiler le composant Lien scintille. Le lien est le seul composant dans lequel j'ai vu cet effet. Pour tenter de résoudre ce problème, j'ai essayé de manipuler d'autres composants en ayant des liens cliquables, mais je n'ai pas encore trouvé une bonne solution. Y at-il un moyen de corriger l'effet de scintillement sur le lien, ou existe-t-il un composant différent qui supporterait les liens?SWT Link scintille avec fond dégradé

Merci,

Brian

Répondre

1

Après avoir passé la journée de travail à ce sujet, je suis venu avec une solution de contournement. J'ai créé un composite pour la zone de texte. Pour chaque mot qui ne fait pas partie d'une URL, a son propre label. Pour les liens, chaque lettre a son propre label. Ensuite, les étiquettes pour les caractères d'URL ont un écouteur pour lancer un navigateur. L'utilisation de cette méthode a fourni la fonctionnalité Lien, géré le redimensionnement correctement et n'a pas de scintillement.

1

Avez-vous essayé de transmettre SWT.NO_BACKGROUND à votre widget Lien? Cela pourrait devenir un peu étrange ... et vous devrez peut-être faire un peu plus de travail pour obtenir le dessin de l'interface graphique, mais ce serait ma première estimation.

À part ça, voici ma mise en œuvre rapide d'un lien dans un StyledText. Vous aurez besoin de remplir pour changer le curseur (si c'est quelque chose que vous voulez), ainsi que de venir avec un bon schéma de mapping "text to link". La seule chose est que je ne suis pas sûr que StyledText héritera de votre arrière-plan ... donnez-lui un coup de feu.

public class StyledTextExample { 
    public static void main(String [] args) { 
    // create the widget's shell 
    Shell shell = new Shell(); 
    shell.setLayout(new FillLayout()); 
    shell.setSize(200, 100); 
    Display display = shell.getDisplay(); 
    // create the styled text widget 
    final StyledText widget = new StyledText(shell, SWT.NONE); 

    String text = "This is the StyledText widget."; 
    widget.setText(text); 
    widget.setEditable(false); 

    final StyleRange hyperlinkStyle = new StyleRange(); 
    String linkWord = "StyledText"; 
    hyperlinkStyle.start = text.indexOf(linkWord); 
    hyperlinkStyle.length = linkWord.length(); 
    hyperlinkStyle.fontStyle = SWT.BOLD; 
    hyperlinkStyle.foreground = display.getSystemColor(SWT.COLOR_BLUE); 
    widget.setStyleRange(hyperlinkStyle); 


    widget.addMouseListener(new MouseAdapter() { 
     public void mouseUp(MouseEvent arg0) { 
      Point clickPoint = new Point(arg0.x, arg0.y); 
      try { 
       int offset = widget.getOffsetAtLocation(clickPoint); 
       if (widget.getStyleRangeAtOffset(offset) != null) { 
        System.out.println("link"); 
       } 
      } catch (IllegalArgumentException e) { 
       //ignore, clicked out of text range. 
      } 
     }}); 
    shell.open(); 
    while (!shell.isDisposed()) 
    if (!display.readAndDispatch()) display.sleep(); 
    } 
}