4

TitleAreaDialogを拡張する新しいクラスを作成しました。

メソッドcreateButtonsForButtonBarをオーバーライドし、新しいボタンを追加できました。しかし、左に1つ配置します?? (デフォルトは、OK と CANCEL 以外は右です)。

どうもありがとう!!

4

1 に答える 1

3

この場合、 をオーバーライドしないでください。これにより、ボタンが右側に配置されるようcreateButtonsForButtonBarに が既に設定されています。GridLayout代わりに、 overridecreateButtonBarを使用すると、コンポジット全体を制御できます。

左側に何かを追加して、SWT に [OK] / [キャンセル] ボタンを配置させるのは簡単です。そうしないと、「デフォルト」ボタンが配置される場所 (Mac では右端) のロジックを複製する必要があるため、これをお勧めします。 OS および最近の GNOME、Win32 およびそれ以前の GNOME の [キャンセル] ボタンの左側)。

例えば:

@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;
}
于 2012-10-17T17:17:36.130 に答える