Добавить ссылку на сообщение MessageDialog
Я занимаюсь разработкой плагинов Eclipse. Я использую класс MessageDialog
, API можно найти здесь.
Я хочу добавить ссылку, как я сделал с "здесь" в сообщении MessageDialog
,
Вот что я делаю:
String errorMessage = "You have received an error. Please visit " + URL_NEEDED_HERE
MessageDialog.openError(getShell(), "Get Existing Data Sources Error", errorMessage);
URL продолжает отображаться как просто строка. Можно ли это показать как ссылку?
1 ответ
Решение
Как сказал @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
но приводит к немного другой компоновке: