3

非 RCP SWT アプリにカスタム ボタン タイトルを追加したいと考えています。

    MessageBox messageBox = new MessageBox(shell, SWT.ICON_WARNING | SWT.ABORT | SWT.RETRY | SWT.IGNORE);
messageBox.setText("Warning");
messageBox.setMessage("Save the changes before exiting?");
 int buttonID = messageBox.open();
 switch(buttonID) {
   case SWT.YES:
  // saves changes ...
case SWT.NO:
 // exits here ...
  break;
 case SWT.CANCEL:
// does nothing ...
 }
                                    System.out.println(buttonID);

}

正常に動作しますが、ボタンのタイトルは「中止」、「再試行」、「無視」です 「上書き」、「名前の変更」、「キャンセル」などのカスタムボタンのタイトルが必要です。それはどのように行うことができますか?
助けてください。

** * 編集 * ** * ** * *

私も試しました

MessageDialog dialog = new MessageDialog(null, "Dangerous Activity", null,
                                                    "Are you sure you want to delete?", MessageDialog.CONFIRM,
                                                    new String[]{"Preview>", "Delete", "Cancel"}, 0)
                                    {
                                    protected void buttonPressed(int buttonId) {
                                        setReturnCode(buttonId);
                                        // close(); Call close for Delete or Cancel?
                                    }};

ただし、MessageDialog ではアプリが RCP である必要があるため、パッケージをインポートする必要はありません。ヘルプ。

4

3 に答える 3

7

これは、SWTで独自に実行する方法の非常に簡単な例です(ただし、 JFaceDialogを使用してこれを実行するためのより快適な方法があります)。

public class CustomDialog extends Dialog
{
    private String message = "";
    private Shell shell;

    public CustomDialog(Shell parent)
    {
        // Pass the default styles here
        this(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
        shell = parent;
    }

    public CustomDialog(Shell parent, int style)
    {
        // Let users override the default styles
        super(parent, style);
        shell = parent;
    }

    public String getMessage()
    {
        return message;
    }

    public void setMessage(String message)
    {
        this.message = message;
    }

    public void open()
    {
        shell.setText(getText());
        createContents(shell);
        shell.pack();
        shell.open();
        Display display = getParent().getDisplay();
        while (!shell.isDisposed())
        {
            if (!display.readAndDispatch())
            {
                display.sleep();
            }
        }
    }

    /**
     * Creates the dialog's contents
     * 
     * @param shell
     *            the dialog window
     */
    private void createContents(final Shell shell)
    {
        shell.setLayout(new GridLayout(3, true));

        // Show the message
        Label label = new Label(shell, SWT.NONE);
        label.setText(message);
        GridData data = new GridData();
        data.horizontalSpan = 3;
        label.setLayoutData(data);

        // Display the input box
        Label image = new Label(shell, SWT.NONE);
        image.setImage(shell.getDisplay().getSystemImage(SWT.ICON_ERROR));
        data = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
        data.horizontalSpan = 3;
        image.setLayoutData(data);

        Button preview = new Button(shell, SWT.PUSH);
        preview.setText("Preview");
        data = new GridData(SWT.FILL, SWT.END, true, true);
        preview.setLayoutData(data);
        preview.addSelectionListener(new SelectionAdapter()
        {
            public void widgetSelected(SelectionEvent event)
            {
                System.out.println("Preview");
            }
        });

        Button delete = new Button(shell, SWT.PUSH);
        delete.setText("Delete");
        data = new GridData(SWT.FILL, SWT.END, true, true);
        delete.setLayoutData(data);
        delete.addSelectionListener(new SelectionAdapter()
        {
            public void widgetSelected(SelectionEvent event)
            {
                System.out.println("Delete");
            }
        });

        Button cancel = new Button(shell, SWT.PUSH);
        cancel.setText("Cancel");
        data = new GridData(SWT.FILL, SWT.END, true, true);
        cancel.setLayoutData(data);
        cancel.addSelectionListener(new SelectionAdapter()
        {
            public void widgetSelected(SelectionEvent event)
            {
                shell.close();
            }
        });

        shell.setDefaultButton(preview);
    }

    public static void main(String[] args)
    {
        CustomDialog dialog = new CustomDialog(new Shell());
        dialog.setText("Title");
        dialog.setMessage("Message");

        dialog.open();
    }
}

次のようになります。

ここに画像の説明を入力してください

于 2013-02-12T15:33:07.613 に答える
3

MessageBoxこの方法で拡張することはできません。RCPアプリケーションを実行していない場合の最善のオプションは、おそらく独自のダイアログをロールすることです:-)

しかし、これらのダイアログの単純な性質を考えると、それは十分に簡単なはずです。

于 2013-02-12T13:36:17.303 に答える