2015-06-03 3 views
1

Я создаю MessageDialog с некоторой информацией.Скопируйте и вставьте MessageDialog сообщение

MessageDialog.openInformation(getShell(), "Success", "Change "+getNumber()+" has been created."); 

Я хочу, чтобы иметь возможность скопировать номер в диалоговом окне, чтобы я мог вставить его в другое место. Есть ли способ установить MessageDialog, чтобы я мог это сделать?

API можно найти here. Я ничего не нашел в API, который действительно помогает мне.

ответ

2

Нет, MessageDialog использует Label для отображения сообщения. Чтобы разрешить C & P, вам понадобится виджет Text. Поэтому вам нужно создать свой собственный подкласс org.eclipse.jface.dialogs.Dialog.

В качестве примера можно привести исходный код InputDialog. Чтобы сделать текстовый виджет доступным только для чтения, создайте его с помощью флага стиля SWT.READ_ONLY.

+0

Bummer. Я рассмотрю это. Благодаря! –

0

Просто используйте JTextArea

, а затем

JTextArea tA= new JTextArea("your message."); 
tA.setEditable(true); 

, то вы можете добавить

MessageDialog.openInformation(getShell(), "Success", "Change "+getNumber()+" has been created."); 

после, изменяя его немного (вы создаете JTextArea, а затем передать, что на JOptionPane в качестве вашего сообщения.)

+1

Этот вопрос отмечен eclipse, поэтому речь идет о SWT, а не о Swing. – ralfstx

+2

О, мой плохой тогда. – CCV

0

Вы можете создать класс, полученный из MessageDialog и переопределить метод createMessageArea с чем-то вроде:

public class MessageDialogWithCopy extends MessageDialog 
{ 
    public MessageDialogWithCopy(Shell parentShell, String dialogTitle, Image dialogTitleImage, 
          String dialogMessage, int dialogImageType, String [] dialogButtonLabels, int defaultIndex) 
    { 
    super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, 
     dialogButtonLabels, defaultIndex); 
    } 

    @Override 
    protected Control createMessageArea(final Composite composite) 
    { 
    Image image = getImage(); 
    if (image != null) 
    { 
     imageLabel = new Label(composite, SWT.NULL); 
     image.setBackground(imageLabel.getBackground()); 
     imageLabel.setImage(image); 

     imageLabel.setLayoutData(new GridData(SWT.CENTER, SWT.BEGINNING, false, false)); 
    } 

    // Use Text control for message to allow copy 

    if (message != null) 
    { 
     Text msg = new Text(composite, SWT.READ_ONLY | SWT.MULTI); 

     msg.setText(message); 

     GridData data = new GridData(SWT.FILL, SWT.TOP, true, false); 
     data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH); 

     msg.setLayoutData(data); 
    } 

    return composite; 
    } 


    public static void openInformation(Shell parent, String title, String message) 
    { 
    MessageDialogWithCopy dialog 
     = new MessageDialogWithCopy(parent, title, null, message, INFORMATION, 
            new String[] {IDialogConstants.OK_LABEL}, 0); 

    dialog.open(); 
    } 
} 
+0

Я немного смущен тем, как это должно работать. У меня нет Composite для перехода в метод. Наверное, я могу создать его. Тогда я бы использовал композит, чтобы открыть информацию? –

+0

Вы создаете класс, полученный из MessageDialog, и в этом классе переопределяете метод createMessageArea. –

+0

Добавлен больше из класса –

Смежные вопросы