Domanda

Sto sviluppando un plug-in eclipse che utilizza un'interfaccia SWT. Devo visualizzare il testo e all'interno di quel testo devono esserci dei collegamenti. Gli unici due widget che ho trovato che mi permetteranno di includere collegamenti cliccabili nel testo sono Link e Browser. Il browser, tuttavia, è eccessivo per le mie esigenze e non sono riuscito a personalizzarne correttamente l'aspetto. Questo lascia solo il widget Link.

Il problema è che ho bisogno che il widget Link erediti un gradiente dal composito in cui si trova. Lo fa correttamente, solo quando viene ridimensionato o fatto scorrere i tremolii del componente Link. Il collegamento è l'unico componente in cui ho visto questo effetto.

Nel tentativo di risolvere questo problema, ho provato a manipolare altri componenti in modo da avere collegamenti cliccabili, ma non ho ancora trovato una buona soluzione.

Esiste comunque un modo per correggere l'effetto di sfarfallio sul collegamento o esiste un componente diverso che supporta i collegamenti?

Grazie,

Brian

È stato utile?

Soluzione

Dopo aver trascorso la giornata a lavorare su questo, ho trovato una soluzione alternativa. Ho creato un composito per l'area di testo. Per ogni parola che non fa parte di un URL, ha una propria etichetta. Per i collegamenti, ogni lettera ha la sua etichetta. Quindi le etichette per i caratteri url hanno ottenuto un ascoltatore per avviare un browser. L'uso di questo metodo ha fornito la funzionalità Link, gestito correttamente il ridimensionamento e non ha sfarfallio.

Altri suggerimenti

Hai provato a passare SWT.NO_BACKGROUND al tuo widget Link? Potrebbe essere un po 'strano ... e potresti dover fare un po' più di lavoro per far disegnare correttamente la gui, ma sarebbe la mia prima ipotesi.

Oltre a questo, ecco la mia implementazione rapida e sporca di un collegamento all'interno di un StyledText. Dovrai compilare per cambiare il cursore (se è qualcosa che desideri), oltre a trovare un buon testo per collegare " schema di mappatura.

L'unica cosa è che non sono sicuro che StyledText erediterà il tuo sfondo ... dagli un colpo.

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();
   }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top