SWT TitleAreaDialog: как разместить кнопку слева от ButtonArea?
Я только что создал новый класс, который расширяетTitleAreaDialog .
Я пересмотрел методcreateButtonsForButtonBar и смог добавить новые кнопки. Но поместить один на слева ?? (По умолчанию это право, besids OK и отмена).
Большое спасибо!!
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; }