每当我点击添加按钮时,我都会尝试动态添加按钮,文本框和标签。我想在另外两个复合材料中实现此行为,但在同一个对话框中。我正在使用滚动复合,因此每当我点击添加按钮时,都会相应地创建新标签,文本框和按钮。
问题是无论何时它们到达对话结束,滚动的合成都不会出现扩展对话框。这样做的最佳方式是什么?
1 [] [] buttonDelete
1 [] [] buttonDelete
1 [] [] buttonDelete
public class DynamicDialog extends Dialog {
private Text text;
private Text text_1;
private Composite composite;
/**
* Create the dialog.
* @param parentShell
*/
public DynamicDialog(Shell parentShell) {
super(parentShell);
}
/**
* Create contents of the dialog.
* @param parent
*/
@Override
protected Control createDialogArea(Composite parent) {
Composite container = (Composite) super.createDialogArea(parent);
container.setLayout(new FillLayout(SWT.HORIZONTAL));
ScrolledComposite scrolledComposite = new ScrolledComposite(container, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
composite = new Composite(scrolledComposite, SWT.NONE);
composite.setLayout(new FormLayout());
//scrolledComposite.setContent(composite);
ScrolledComposite scrolledComposite1 = new ScrolledComposite(composite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
scrolledComposite1.setExpandHorizontal(true);
scrolledComposite1.setExpandVertical(true);
final Composite composite_1 = new Composite(scrolledComposite1, SWT.NONE);
composite_1.setLayout(new GridLayout(4, false));
FormData fd_composite_1 = new FormData();
fd_composite_1.top = new FormAttachment(0, 10);
fd_composite_1.left = new FormAttachment(0, 10);
fd_composite_1.bottom = new FormAttachment(0, 85);
fd_composite_1.right = new FormAttachment(0, 430);
composite_1.setLayoutData(fd_composite_1);
Label label = new Label(composite_1, SWT.NONE);
label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
label.setText("1");
text_1 = new Text(composite_1, SWT.BORDER);
text_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
text = new Text(composite_1, SWT.BORDER);
text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Button btnDelete = new Button(composite_1, SWT.NONE);
btnDelete.setText("delete");
final Composite composite_2 = new Composite(composite, SWT.NONE);
composite_2.setLayout(new GridLayout(2, false));
FormData fd_composite_2 = new FormData();
fd_composite_2.bottom = new FormAttachment(composite_1, 41, SWT.BOTTOM);
fd_composite_2.top = new FormAttachment(composite_1, 6);
fd_composite_2.right = new FormAttachment(100, -10);
fd_composite_2.left = new FormAttachment(100, -74);
composite_2.setLayoutData(fd_composite_2);
new Label(composite_2, SWT.NONE);
Button btnAdd = new Button(composite_2, SWT.NONE);
btnAdd.setText("ADD");
scrolledComposite.setContent(composite);
scrolledComposite.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
scrolledComposite1.setContent(composite_1);
scrolledComposite1.setMinSize(composite_1.computeSize(SWT.DEFAULT, SWT.DEFAULT));
btnAdd.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
Label label2 = new Label(composite_1, SWT.NONE);
label2.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
label2.setText("1");
Text text_12 = new Text(composite_1, SWT.BORDER);
text_12.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Text text13 = new Text(composite_1, SWT.BORDER);
text13.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Button btnDelete = new Button(composite_1, SWT.NONE);
btnDelete.setText("delete");
Point p0 = composite_1.getSize();
composite_1.setSize(p0.x+10, p0.y+10);
composite_1.setSize(p0);
composite_1.layout();
Point p = composite.getSize();
composite.setSize(p.x+10, p.y+10);
composite.setSize(p);
composite.layout();
}
});
return container;
}
/**
* Create contents of the button bar.
* @param parent
*/
@Override
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,
true);
createButton(parent, IDialogConstants.CANCEL_ID,
IDialogConstants.CANCEL_LABEL, false);
}
/**
* Return the initial size of the dialog.
*/
@Override
protected Point getInitialSize() {
return new Point(450, 300);
}
public static void main(String[] args){
Shell shell = new Shell(new Display());
shell.setLayout(new FillLayout());
DynamicDialog dd = new DynamicDialog(shell);
dd.open();
}
}
答案 0 :(得分:0)
不确定这是否适用于您的情况,但我无法使我的滚动窗填充可用空间。它要么只占用内部组件的整个首选大小(没有滚动条,大于容器),要么缩小到最小尺寸。
修复它我必须设置LayoutData:
GridData scrollPaneData = new GridData(GridData.FILL_BOTH);
scrolledComposite.setLayoutData(scrollPaneData);