我正在开发一个使用SWT接口的eclipse插件。我需要显示文本,在该文本中需要链接。我发现的唯一两个小部件允许我在文本中包含可点击的链接是链接和浏览器。然而,浏览器对我的需求来说太过分了,我无法正确定制它的外观。这只留下了Link小部件。
问题是我需要Link小部件从它所在的Composite继承渐变。它只是在调整大小或滚动Link组件闪烁时才能正确执行。链接是我见过这种效果的唯一组件。
为了解决此问题,我尝试将其他组件操作为可点击链接,但我还没有找到一个好的解决方案。
无论如何都要修复链接上的闪烁效果,还是有一个支持链接的不同组件?
谢谢,
布赖恩
答案 0 :(得分:1)
在花了一天时间研究这个问题之后,我想出了一个解决方法。我为文本区域创建了一个Composite。对于不属于网址的每个单词,都有自己的标签。对于链接,每个字母都有自己的标签。然后,url字符的标签有一个监听器来启动浏览器。使用此方法提供了链接功能,正确处理了大小调整,并且没有闪烁。
答案 1 :(得分:1)
您是否尝试将SWT.NO_BACKGROUND传递给您的链接小部件?它可能会有点奇怪......你可能需要做一些工作才能正确地绘制gui,但那是我的第一次猜测。
除此之外,这是我对StyledText内部链接的快速实现。你需要填写更改光标(如果这是你想要的东西),以及提出一个好的“文本链接”映射方案。
唯一的问题是我不确定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();
}
}