SWT TitleAreaDialog: как разместить кнопку слева от ButtonArea?


Я только что создал новый класс, который расширяетTitleAreaDialog .

Я пересмотрел методcreateButtonsForButtonBar и смог добавить новые кнопки. Но поместить один на слева ?? (По умолчанию это право, besids OK и отмена).

Большое спасибо!!

1 4
swt

1 ответ:

В этом случае не переопределяйте createButtonsForButtonBar, что уже настроит GridLayout таким образом, что кнопки находятся на правой стороне. Вместо этого переопределите createButtonBar, что позволит вам контролировать весь композит.

Легко добавить что-то в левую часть, а затем позволить SWT разместить кнопки OK / Cancel для вас - что я рекомендую, так как в противном случае вам пришлось бы дублировать логику размещения кнопки" default " (крайняя правая на Mac OS и недавнем GNOME, слева кнопки отмены на Win32 и Старом GNOME.) В этом случае вы можете создать композит, охватывающий всю панель кнопок, а затем позволить SWT нарисовать ее панель кнопок в крайнем правом углу.

Например:

@Override
protected Control createButtonBar(final Composite parent)
{
    final Composite buttonBar = new Composite(parent, SWT.NONE);

    final GridLayout layout = new GridLayout();
    layout.numColumns = 2;
    layout.makeColumnsEqualWidth = false;
    layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
    buttonBar.setLayout(layout);

    final GridData data = new GridData(SWT.FILL, SWT.BOTTOM, true, false);
    data.grabExcessHorizontalSpace = true;
    data.grabExcessVerticalSpace = false;
    buttonBar.setLayoutData(data);

    buttonBar.setFont(parent.getFont());

    // place a button on the left
    final Button leftButton = new Button(buttonBar, SWT.PUSH);
    leftButton.setText("Left!");

    final GridData leftButtonData = new GridData(SWT.LEFT, SWT.CENTER, true, true);
    leftButtonData.grabExcessHorizontalSpace = true;
    leftButtonData.horizontalIndent = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
    leftButton.setLayoutData(leftButtonData);

    // add the dialog's button bar to the right
    final Control buttonControl = super.createButtonBar(buttonBar);
    buttonControl.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false));

    return buttonBar;
}