一个简单的 MessageDialog(或 MessageBox,任何方法都可以打开一个对话框),如下所示: MessageDialog.openInformation(shell, "Test", "Get help form this link www.google.com"); 有没有办法让 www.google.com 成为超链接?点击网址并打开浏览器。
问问题
1722 次
1 回答
1
开箱即用是不可能的。我创建了一个自己的类,名为 MyMessageDialog 来执行此操作:
https://gist.github.com/andydunkel/8914008
它基本上是 MessageDialog 的所有源代码。然后我覆盖了 createMessageArea 方法并添加了一个 Link 而不是标签并添加了一个事件侦听器:
protected Control createMessageArea(Composite composite) {
// create composite
// create image
Image image = getImage();
if (image != null) {
imageLabel = new Label(composite, SWT.NULL);
image.setBackground(imageLabel.getBackground());
imageLabel.setImage(image);
//addAccessibleListeners(imageLabel, image);
GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.BEGINNING)
.applyTo(imageLabel);
}
// create message
if (message != null) {
linkLabel = new Link(composite, getMessageLabelStyle());
linkLabel.setText(message);
linkLabel.addSelectionListener(new SelectionAdapter(){
@Override
public void widgetSelected(SelectionEvent e) {
System.out.println("You have selected: "+e.text);
try {
// Open default external browser
PlatformUI.getWorkbench().getBrowserSupport().getExternalBrowser().openURL(new URL(e.text));
}
catch (PartInitException ex) {
// TODO Auto-generated catch block
ex.printStackTrace();
}
catch (MalformedURLException ex) {
// TODO Auto-generated catch block
ex.printStackTrace();
}
}
});
GridDataFactory
.fillDefaults()
.align(SWT.FILL, SWT.BEGINNING)
.grab(true, false)
.hint(
convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH),
SWT.DEFAULT).applyTo(linkLabel);
}
return composite;
}
现在可以使用其中的 HTML 代码调用 MessageDialog:
MyMessageDialog.openError(parent.getShell(), "Hehe", "<a href=\"http://google.com\">Google.com</a> Test");
不是一个非常理想的解决方案,但它有效:
安迪
于 2014-02-10T11:47:21.130 回答