2015-03-31 2 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-адрес продолжает отображаться до, как только String. Возможно ли это показать как ссылку?

+1

Нет MessageDialog делает не поддерживайте это. Вам нужно будет написать собственный диалог и использовать SWT 'Link' и прослушиватель, чтобы открыть URL-адрес. –

+0

Ну, это облом. Благодаря! –

ответ

3

Как @ greg-449 сказал, MessageDialog не поддерживает ссылки. Если вы не возражаете хак подхода, вы можете сохранить некоторую работу и переопределить 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