Как @ 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 делает не поддерживайте это. Вам нужно будет написать собственный диалог и использовать SWT 'Link' и прослушиватель, чтобы открыть URL-адрес. –
Ну, это облом. Благодаря! –