如何使SWT Link小部件中的文本可选

时间:2015-10-16 16:11:55

标签: java hyperlink swt

我在Link SWT widget创建的文字如下:

Link message = new Link(parent, SWT.WRAP);
message.setText(myMessage);

我希望文本(在myMessage变量中)可以选择,以授予用户复制它的权限。 我怎么能这样做?

我使用了Link小部件,因为我需要文本中的超链接可以点击。

2 个答案:

答案 0 :(得分:2)

SWT Link小部件无法选择。为了解决这个问题,我可以想到

  1. Link提供一个上下文菜单,其中包含 Copy 菜单项,可将文本复制到剪贴板
  2. 使用Browser窗口小部件,该窗口小部件可选,但布局较难,需要额外的工作才能在选择链接时触发功能
  3. 如果您不介意对org.eclipse.ui.forms的额外依赖,请使用FormTextFormText可以显示超链接并允许选择和复制文本

答案 1 :(得分:1)

为什么不使用StyledText来允许文本选择?

String string = "This is sample text with a link and some other link here.";
final StyledText styledText = new StyledText (shell, SWT.MULTI | SWT.BORDER);
styledText.setText(string);

String link1 = "link";
String link2 = "here";
StyleRange style = new StyleRange();
style.underline = true;
style.underlineStyle = SWT.UNDERLINE_LINK;

int[] ranges = {string.indexOf(link1), link1.length(), string.indexOf(link2), link2.length()}; 
StyleRange[] styles = {style, style};
styledText.setStyleRanges(ranges, styles);

styledText.addListener(SWT.MouseDown, new Listener() {
    @Override
    public void handleEvent(Event event) {
        // It is up to the application to determine when and how a link should be activated.
        // In this snippet links are activated on mouse down when the control key is held down 
        if ((event.stateMask & SWT.MOD1) != 0) {
            try {
                int offset = styledText.getOffsetAtLocation(new Point (event.x, event.y));
                StyleRange style = styledText.getStyleRangeAtOffset(offset);
                if (style != null && style.underline && style.underlineStyle == SWT.UNDERLINE_LINK) {
                    System.out.println("Click on a Link");
                }
            } catch (IllegalArgumentException e) {
                // no character under event.x, event.y
            }

        }
    }
});

完整示例here