复制并粘贴 MessageDialog 消息

Copy and paste MessageDialog message

我正在创建一个包含一些信息的 MessageDialog。

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

我希望能够复制对话框中的数字,以便将其粘贴到其他地方。有没有办法设置 MessageDialog 以便我可以完成此操作?

API可以找到here。我没有在 API 中找到任何真正帮助我的东西。

不,MessageDialog 使用 Label 来显示消息。为了允许 C&P,您需要一个 Text 小部件。所以你必须创建自己的 org.eclipse.jface.dialogs.Dialog.

的子类

你可以看看InputDialog的源代码作为例子。为了使文本小部件为只读,请使用 SWT.READ_ONLY 样式标志创建它。

只需使用一个 JTextArea

然后是

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

然后您可以添加

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

之后,稍作更改(创建 JTextArea,然后将其作为消息传递给 JOptionPane。)

您可以创建一个派生自 MessageDialog 的 class 并用类似以下内容覆盖 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();
   }
}