Pregunta

Estoy desarrollando un complemento para eclipse que usa una interfaz SWT. Necesito mostrar texto, y dentro de ese texto debe haber enlaces. Los únicos dos widgets que he encontrado que me permitirán incluir enlaces en los que se puede hacer clic en el texto son Link y Browser. Sin embargo, el navegador es excesivo para mis necesidades, y no pude personalizarlo adecuadamente. Esto solo deja el widget de enlace.

El problema es que necesito el widget de Enlace para heredar un degradado del Compuesto en el que se encuentra. Hace esto correctamente, solo cuando se cambia el tamaño o se desplaza el componente del Enlace parpadea. El enlace es el único componente en el que he visto este efecto.

En un intento de solucionar este problema, he intentado manipular otros componentes para que tengan enlaces a los que se pueda hacer clic, pero todavía no he encontrado una buena solución.

¿Hay alguna forma de corregir el efecto de parpadeo en el enlace, o hay un componente diferente que soporte enlaces?

Gracias,

Brian

¿Fue útil?

Solución

Después de pasar el día trabajando en esto, se me ocurrió una solución. Creé un compuesto para el área de texto. Por cada palabra que no es parte de una url, tiene su propia etiqueta. Para los enlaces, cada letra tiene su propia etiqueta. Luego, las etiquetas para los caracteres de la url hicieron que un oyente lanzara un navegador. El uso de este método proporcionó la funcionalidad de enlace, manejó el tamaño correctamente y no tiene parpadeo.

Otros consejos

¿Has intentado pasar SWT.NO_BACKGROUND a tu widget de enlace? Puede que sea un poco extraño ... y es posible que tenga que hacer un poco más de trabajo para obtener el gui de forma adecuada, pero esa sería mi primera suposición.

Aparte de eso, aquí está mi implementación rápida y sucia de un enlace dentro de un StyledText. Deberá rellenar para cambiar el cursor (si eso es algo que desea), así como crear un buen " texto para vincular " esquema de mapeo.

Lo único es que no estoy seguro de si StyledText heredará tu fondo ... dale una oportunidad.

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top