Question

Je développe un plug-in Eclipse qui utilise 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 permettent d'inclure des liens cliquables dans le texte sont Link and Browser. Cependant, le navigateur est excessif pour mes besoins et je ne peux pas en personnaliser l’apparence. 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 lorsqu'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 afin de créer des liens cliquables, mais je n'ai pas encore trouvé de bonne solution.

Est-il possible de corriger l’effet de scintillement sur le lien ou existe-t-il un composant différent qui prend en charge les liens?

Merci,

Brian

Était-ce utile?

La solution

Après avoir passé la journée à travailler là-dessus, j’ai proposé 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, obtenez son propre label. Pour les liens, chaque lettre a sa propre étiquette. Ensuite, les libellés des caractères url ont permis à un auditeur de lancer un navigateur. L’utilisation de cette méthode a permis d’obtenir la fonctionnalité Lien, de gérer le redimensionnement correctement et de ne pas scintiller.

Autres conseils

Avez-vous essayé de passer SWT.NO_BACKGROUND à votre widget Link? Cela peut devenir un peu étrange ... et vous devrez peut-être travailler un peu plus pour bien dessiner l'interface graphique, mais ce serait ma première hypothèse.

En dehors de cela, voici mon implémentation rapide et délicate 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 pour trouver un bon "texte à lier" schéma de mappage.

La seule chose à retenir est que je ne suis pas sûr que StyledText héritera de votre arrière-plan ... essayez-le.

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();
   }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top