1

SWT インターフェイスを使用する Eclipse プラグインを開発しています。テキストを表示する必要があり、そのテキスト内にリンクが必要です。クリック可能なリンクをテキストに含めることができる唯一の 2 つのウィジェットは、Link と Browser です。しかし、ブラウザは私のニーズに対してやり過ぎで、見た目を適切にカスタマイズできませんでした。これにより、リンク ウィジェットのみが残ります。

問題は、Link ウィジェットが含まれている Composite からグラデーションを継承する必要があることです。Link コンポーネントのちらつきがサイズ変更またはスクロールされた場合にのみ、これが正しく行われます。リンクは、私がこの効果を見た唯一のコンポーネントです。

これを修正するために、他のコンポーネントを操作してクリック可能なリンクを作成しようとしましたが、まだ良い解決策を見つけていません。

リンクのちらつき効果を修正する方法はありますか、それともリンクをサポートする別のコンポーネントがありますか?

ありがとう、

ブライアン

4

2 に答える 2

1

これに1日を費やした後、回避策を思いつきました。テキストエリア用のコンポジットを作成しました。URL の一部ではない単語ごとに、独自のラベルが付けられます。リンクの場合、各文字には独自のラベルが付いています。次に、URL 文字のラベルは、ブラウザーを起動するためのリスナーを取得しました。このメソッドを使用すると、リンク機能が提供され、サイズ変更が適切に処理され、ちらつきがなくなります。

于 2008-10-02T20:12:14.900 に答える
1

Link ウィジェットに SWT.NO_BACKGROUND を渡してみましたか? 少し奇妙になるかもしれません...そして、GUIを適切に描画するにはもう少し作業を行う必要があるかもしれませんが、それが私の最初の推測です.

それ以外は、ここに StyledText 内のリンクの Quick n' dirty 実装があります。カーソルを変更するために入力する必要があります (それが必要な場合)。また、適切な「リンクへのテキスト」マッピング スキームを考え出す必要があります。

唯一のことは、StyledText が背景を継承するかどうかわからないということです...試してみてください。

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();
   }
}
于 2008-10-30T21:08:25.053 に答える