我已经创建了一个自定义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按钮之间的空间比其他按钮更细。看起来他们是绑在一起或类似的......
还有其他解决方案可以改变自己的立场吗?
谢谢:)
答案 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);
}
}
=)