SWT TitleAreaDialog:如何在ButtonArea的LEFT上放置一个Button?

时间:2012-10-17 16:54:52

标签: java dialog swt

我刚创建了一个扩展 TitleAreaDialog 的新类。

我覆盖了方法 createButtonsForButtonBar ,我能够添加新按钮。但是将一个放在 LEFT 上? (默认是正确的,besids OK和CANCEL)。

非常感谢!!

1 个答案:

答案 0 :(得分:3)

在这种情况下,请勿覆盖createButtonsForButtonBar,这已经设置了GridLayout,使按钮位于右侧。相反,覆盖createButtonBar,这将让您可以控制整个复合材料。

很容易在左侧添加一些东西,然后让SWT为你放置OK / Cancel按钮 - 我建议你这样做,因为你不得不复制“默认”按钮放置位置的逻辑(远在Mac OS和最近的GNOME上,在Win32和旧GNOME上的Cancel按钮的左侧。)在这种情况下,您可以设置一个跨越整个按钮栏的复合,然后让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;
}