2015-03-31 91 views
0

我在做Eclipse插件開發。我正在使用類MessageDialog。可以找到API here將鏈接添加到MessageDialog消息

我想添加一個鏈接,就像我在「MessageDialog」的消息中所做的那樣。

下面是我在做什麼:

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

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

的URL保持顯示爲只是一個字符串。它可能顯示爲鏈接?

+1

沒有MessageDialog做不支持這一點。你必須寫你自己的對話框,並使用SWT'Link'控件和一個監聽器打開URL。 – 2015-03-31 16:59:04

+0

那麼這是一個無賴。謝謝! – 2015-03-31 17:02:17

回答

3

由於@ 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,只是用Link部件替換Label

或者您可以覆蓋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