添加MessageDialog消息的链接

时间:2015-03-31 16:53:04

标签: java eclipse eclipse-plugin eclipse-rcp

我在做Eclipse插件开发。我正在使用班级MessageDialog。可以找到API here

我想添加像我一样的链接" here"在MessageDialog

的消息中

这是我正在做的事情:

String errorMessage = "You have received an error. Please visit " + URL_NEEDED_HERE

MessageDialog.openError(getShell(), "Get Existing Data Sources Error", errorMessage);

网址一直显示为字符串。是否可以将其显示为链接?

1 个答案:

答案 0 :(得分:5)

正如@ greg-449所说,MessageDialog不支持链接。如果您不介意使用hackish方法,则可以保存一些工作并覆盖createMessageArea,如下所示:

  @Override
  protected Control createMessageArea( Composite composite ) {
    Image image = getImage();
    if( image != null ) {
      imageLabel = new Label( composite, SWT.NULL );
      image.setBackground( imageLabel.getBackground() );
      imageLabel.setImage( image );
      GridDataFactory.fillDefaults().align( SWT.CENTER, SWT.BEGINNING ).applyTo( imageLabel );
    }
    if( message != null ) {
      Link link = new Link( composite, getMessageLabelStyle() );
      link.setText( "This is a longer nonsense message to show that the link widget wraps text if specified so. Please visit <a>this link</a>." );
      GridDataFactory.fillDefaults()
        .align( SWT.FILL, SWT.BEGINNING )
        .grab( true, false )
        .hint( convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH ), SWT.DEFAULT )
        .applyTo( link );
    }
    return composite;
  }
};

代码从IconAndMessageDialog复制,只需用Label小部件替换Link

或者你可以像这样覆盖createCustomArea

  @Override
  protected Control createCustomArea( Composite parent ) {
    Link link = new Link( parent, SWT.WRAP );
    link.setText( "Please visit <a>this link</a>." );
    return link;
  }

这是向MessageDialg添加自定义控件的指定方式,但导致布局略有不同:

MessageDialog with link