문제

SWT 인터페이스를 사용하는 Eclipse 플러그인을 개발하고 있습니다. 텍스트를 표시해야하며 그 텍스트 내에는 링크가 있어야합니다. 텍스트에 클릭 가능한 링크를 포함시킬 수있는 유일한 두 개의 위젯은 링크 및 브라우저입니다. 그러나 브라우저는 내 요구에 대한 과잉이며 모양을 올바르게 사용자 정의 할 수 없었습니다. 이것은 링크 위젯 만 남습니다.

문제는 복합재에서 그라디언트를 상속하기 위해 링크 위젯이 필요하다는 것입니다. 링크 구성 요소 플리커를 크기를 조정하거나 스크롤 할 때만 올바르게 수행합니다. 링크는이 효과를 본 유일한 구성 요소입니다.

이 문제를 해결하기 위해 다른 구성 요소를 클릭 가능한 링크로 조작하려고 시도했지만 아직 좋은 솔루션을 찾지 못했습니다.

어쨌든 링크에서 깜박 거리는 효과를 수정해야합니까, 아니면 링크를 지원하는 다른 구성 요소가 있습니까?

감사,

브라이언

도움이 되었습니까?

해결책

이 일을하면서 하루를 보낸 후, 나는 해결 방법을 생각해 냈습니다. 텍스트 영역에 대한 합성물을 만들었습니다. URL의 일부가 아닌 각 단어에 대해 자체 레이블을 얻었습니다. 링크의 경우 각 문자는 자체 레이블을 받았습니다. 그런 다음 URL 문자의 레이블은 리스너가 브라우저를 시작했습니다. 이 방법을 사용하면 링크 기능이 제공되었으며, 적절하게 크기를 조정했으며 깜박임이 없습니다.

다른 팁

swt.no_background를 링크 위젯에 전달해 보셨습니까? 조금 이상해 질 수 있습니다 ... 그리고 GUI 드로잉을 제대로 얻기 위해 조금 더 많은 일을해야 할 수도 있지만, 그것은 나의 첫 번째 추측 일 것입니다.

그 외에는 StyledText 내부의 링크의 빠른 N '더티 구현이 있습니다. 커서를 변경하기 위해 작성해야합니다 (원하는 경우)과 좋은 "텍스트를 연결하는 텍스트"매핑 구성표를 제시해야합니다.

유일한 것은 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();
   }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top