如何在Java MessageDialog中创建超链接url字符串?

如何在Java MessageDialog中创建超链接url字符串?,url,hyperlink,rcp,messagedialog,Url,Hyperlink,Rcp,Messagedialog,一个简单的MessageDialog(或MessageBox,任何方法都可以打开对话框),如下所示: MessageDialog.openInformation(shell,“测试”,“从这个链接获取帮助www.google.com”); 有没有办法让www.google.com成为一个超链接?单击url并打开浏览器。这是不可能的。我自己创建了一个名为MyMessageDialog的类来执行此操作: 它基本上是来自MessageDialog的所有源代码。然后我重写了createMessageA

一个简单的MessageDialog(或MessageBox,任何方法都可以打开对话框),如下所示: MessageDialog.openInformation(shell,“测试”,“从这个链接获取帮助www.google.com”);
有没有办法让www.google.com成为一个超链接?单击url并打开浏览器。

这是不可能的。我自己创建了一个名为MyMessageDialog的类来执行此操作:

它基本上是来自MessageDialog的所有源代码。然后我重写了createMessageArea方法,添加了一个链接而不是标签,并添加了一个事件侦听器:

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");
MyMessageDialog.openError(parent.getShell(),“Hehe”,“Test”);
这不是一个非常理想的解决方案,但它是有效的:


安迪

这是不可能的。我自己创建了一个名为MyMessageDialog的类来执行此操作:

它基本上是来自MessageDialog的所有源代码。然后我重写了createMessageArea方法,添加了一个链接而不是标签,并添加了一个事件侦听器:

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");
MyMessageDialog.openError(parent.getShell(),“Hehe”,“Test”);
这不是一个非常理想的解决方案,但它是有效的:


Andy

您是如何将链接作为标签的一部分的?可能吗?另外,还有更简单的方法吗?这会导致崩溃:PlatformUI.getWorkbench().getBrowserSupport().getExternalBrowser().openURL(新URL(e.text))。它说:java.lang.ClassNotFoundException:org.eclipse.ui.testing.TestableObject位于java.net.URLClassLoader.findClass(未知源代码)如何将链接作为标签的一部分?可能吗?另外,还有更简单的方法吗?这会导致崩溃:PlatformUI.getWorkbench().getBrowserSupport().getExternalBrowser().openURL(新URL(e.text))。它说:java.net.URLClassLoader.findClass上的java.lang.ClassNotFoundException:org.eclipse.ui.testing.TestableObject(未知源)