Pergunta

Estou desenvolvendo um um eclipse plugin que usa uma interface SWT. Eu preciso para exibir o texto, e dentro desse texto é preciso haver ligações. Os únicos dois widgets que eu descobri que me permite incluir links clicáveis ??no texto são Link e navegador. Navegador, no entanto, é um exagero para minhas necessidades, e eu não podia personalizar corretamente o olhar dele. Isso só deixa o widget Fazer a ligação.

O problema é que eu preciso o link do widget para herdar um gradiente a partir do composto em que se encontra. Ele faz isso corretamente, apenas quando é redimensionada ou rolada os lampejos de componentes Link. A ligação é o único componente em que eu já vi esse efeito.

Em uma tentativa de corrigir isso eu tentei manipular outros componentes em ter links clicáveis, mas eu não encontrei uma boa solução ainda.

Existe uma maneira de corrigir o efeito de cintilação no link, ou há um componente diferente, que iria apoiar links?

Obrigado,

Brian

Foi útil?

Solução

Depois de passar o dia de trabalho sobre isso, eu vim com uma solução alternativa. Eu criei um composto para a área de texto. Para cada palavra que não faz parte de um url, tem o seu próprio selo. Para links, cada letra tem o seu próprio selo. Em seguida, os rótulos para os caracteres de URL tem um ouvinte para lançar um browser. Usando este método desde a funcionalidade de ligação, tratado redimensionamento corretamente, e não tem flicker.

Outras dicas

Você já tentou passar SWT.NO_BACKGROUND para seu widget ligação? Ele pode ficar um pouco estranho ... e você pode ter que fazer um pouco mais de trabalho para obter o gui desenho corretamente, mas que seria a minha primeira suposição.

Além disso, aqui está a minha aplicação sujo Breve n' de um link dentro de um StyledText. Você terá que preencher para mudar o cursor (se isso é algo que você quer), bem como chegando com uma boa "texto para link" esquema de mapeamento.

A única coisa é que eu não tenho certeza se StyledText herdará seu fundo ... dar-lhe um tiro.

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();
   }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top