如何更改JFace向导对话框中的后退和下一个按钮位置?

时间:2012-08-07 09:16:20

标签: java eclipse swt jface wizard

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

以下是代码:

@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);

}

当我查看向导时,我发现Previous和Next按钮之间的空间比其他按钮更细。看起来他们是绑在一起或类似的......

还有其他解决方案可以改变自己的立场吗?

谢谢:)

1 个答案:

答案 0 :(得分: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);
    }   
}

=)