Frage

Ich entwickle eine Eclipse-Plugin, das eine SWT-Schnittstelle verwendet. Ich brauche Text anzuzeigen, und innerhalb dieses Textes braucht es Links zu sein. Die einzigen zwei Widgets, die ich gefunden habe, die ich anklickbare Links in Text sind Link-und Browser enthalten können. Browser ist jedoch übertrieben für meine Bedürfnisse, und ich konnte nicht richtig den Blick von ihm anpassen. Dies lässt nur den Link-Widget.

Das Problem ist, ich das Link-Widget benötigen einen Gradienten von Composite zu erben, in der er sich befindet. Es tut dies richtig, nur dann, wenn es geändert wird oder gescrollt die Link-Komponente flimmert. Die Verbindung ist die einzige Komponente, in der ich diesen Effekt gesehen habe.

In einem Versuch, dieses Problem zu beheben Ich habe versucht zu manipulieren andere Komponenten in anklickbare Links zu haben, aber ich habe nicht eine gute Lösung vor.

gefunden

Gibt es trotzdem, den flackernden Effekt auf den Link zu beheben, oder gibt es eine andere Komponente, welche Links unterstützen würde?

Danke,

Brian

War es hilfreich?

Lösung

Nach dem Tag die Ausgaben für diese Arbeit kam ich mit einer Vermeidung des Problems auf. Ich habe einen Verbund für den Textbereich. Für jedes Wort, das nicht Teil einer URL ist, hat sein eigenes Label. Für Links, bekam jeder Buchstabe ein eigenes Label. Dann werden die Etiketten für die URL-Zeichen bekam einen Hörer einen Browser zu starten. Mit dieser Methode vorausgesetzt, dass die Link-Funktionalität, richtig gehandhabt Ändern der Größe, und hat kein Flimmern.

Andere Tipps

Haben Sie SWT.NO_BACKGROUND zu Ihrem Link-Widget versucht vorbei? Es könnte ein wenig seltsam ... und Sie können ein wenig mehr Arbeit zu tun haben, um die gui zu bekommen Zeichnung richtig, aber das wäre meine erste Vermutung sein.

Other than that, hier ist meine Schnell n‘schmutzige Implementierung eines Links innerhalb eines StyledText. Sie müssen zum Ändern der Cursor füllen (wenn das etwas ist, Sie wollen), sowie mit einem guten kommen Zuordnungsschema „Text zu verknüpfen“.

Die einzige Sache, die ich nicht sicher bin, ob StyledText Ihren Hintergrund erben ... give it a shot.

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();
   }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top