2

我创建了一个自定义 JFace 向导对话框来添加按钮。我找到了一种方法来更改它们在布局中的位置(例如将它们放在取消和完成按钮之间),但是当我尝试将它们放在上一个和下一个按钮之间时它不起作用。

这是代码:

@Override
protected void createButtonsForButtonBar(Composite parent) {
    super.createButtonsForButtonBar(parent);

    Button nextButton = getButton(IDialogConstants.NEXT_ID);
    nextButton.setText(NEXT_LABEL);
    Button backButton = getButton(IDialogConstants.BACK_ID);
    backButton.setText(BACK_LABEL);
    Button cancelButton = getButton(IDialogConstants.CANCEL_ID);
    cancelButton.setText(CANCEL_LABEL);
    Button finishButton = getButton(IDialogConstants.FINISH_ID);
    finishButton.setText(FINISH_LABEL);

    rejectButton = super.createButton(parent, REJECT_ID, REJECT_LABEL, false);
    rejectButton.moveAbove(nextButton);
    setButtonLayoutData(rejectButton);

    acceptButton = super.createButton(parent, ACCEPT_ID, ACCEPT_LABEL, false);
    acceptButton.moveBelow(rejectButton);
    setButtonLayoutData(acceptButton);

}

当我查看向导时,我发现“上一个”和“下一个”按钮之间的空间比其他按钮更薄。看起来他们被绑定在一起或类似的东西......

是否有另一种解决方案来改变他们的立场?

谢谢 :)

4

1 回答 1

3

毕竟,解决方案非常简单 =)

Back 和 Next 按钮在主组合内有自己的父组合:

private Composite createPreviousAndNextButtons(Composite parent) {
    // increment the number of columns in the button bar
    ((GridLayout) parent.getLayout()).numColumns++;
    Composite composite = new Composite(parent, SWT.NONE);
    // create a layout with spacing and margins appropriate for the font
    // size.
    GridLayout layout = new GridLayout();
    layout.numColumns = 0; // will be incremented by createButton
    layout.marginWidth = 0;
    layout.marginHeight = 0;
    layout.horizontalSpacing = 0;
    layout.verticalSpacing = 0;
    composite.setLayout(layout);
    GridData data = new GridData(GridData.HORIZONTAL_ALIGN_CENTER
            | GridData.VERTICAL_ALIGN_CENTER);
    composite.setLayoutData(data);
    composite.setFont(parent.getFont());
    backButton = createButton(composite, IDialogConstants.BACK_ID,
            IDialogConstants.BACK_LABEL, false);
    nextButton = createButton(composite, IDialogConstants.NEXT_ID,
            IDialogConstants.NEXT_LABEL, false);
    return composite;

因此,我将重写方法的代码更改为:

@Override
protected void createButtonsForButtonBar(Composite parent) {
    super.createButtonsForButtonBar(parent);

    Button cancelButton = getButton(IDialogConstants.CANCEL_ID);
    cancelButton.setText(CANCEL_LABEL);
    Button finishButton = getButton(IDialogConstants.FINISH_ID);
    finishButton.setText(FINISH_LABEL);

    rejectButton = super.createButton(parent, REJECT_ID, REJECT_LABEL, false);
    setButtonLayoutData(rejectButton);

    acceptButton = super.createButton(parent, ACCEPT_ID, ACCEPT_LABEL, false);
    acceptButton.moveBelow(rejectButton);
    setButtonLayoutData(acceptButton);

    if (super.getWizard().needsPreviousAndNextButtons()) {
        Button nextButton = getButton(IDialogConstants.NEXT_ID);
        nextButton.setText(NEXT_LABEL);
        Button backButton = getButton(IDialogConstants.BACK_ID);
        backButton.setText(BACK_LABEL);

        // change composite parent of back and next buttons.
        nextButton.setParent(parent);
        backButton.setParent(parent);
        ((GridLayout) parent.getLayout()).numColumns = ((GridLayout) parent.getLayout()).numColumns + 2;

        // defines buttons'order
        finishButton.moveBelow(null);
        cancelButton.moveAbove(finishButton);
        nextButton.moveAbove(cancelButton);
        acceptButton.moveAbove(nextButton);
        rejectButton.moveAbove(acceptButton);
        backButton.moveAbove(rejectButton);
    }   
}

=)

于 2012-08-08T09:32:07.393 回答