gpt4 book ai didi

java - SWT:如何让 Composite 自动填充其容器

转载 作者:太空宇宙 更新时间:2023-11-04 12:59:58 25 4
gpt4 key购买 nike

在下面的代码中我使用了 SWT 和draw2d。然而,当我运行该程序时,什么也没有显示。经过一番调试,我发现这是因为容器的大小都是0。我必须手动输入一个大小,例如

    canvasData.heightHint = 500;
canvasData.widthHint = 500;

这很好,但我需要这些容器将它们自己装入表单赋予它们的空间中。有什么办法可以做到这一点吗?任何建议都会有帮助。

/* (non-Javadoc)
* @see org.eclipse.ui.forms.editor.FormPage#createFormContent(org.eclipse.ui.forms.IManagedForm)
*/
@Override
protected void createFormContent( IManagedForm managedForm )
{
super.createFormContent(managedForm);

ScrolledForm form = managedForm.getForm();

Composite tabParent = managedForm.getToolkit().createComposite(form.getBody());
GridData tabParentData = new GridData(SWT.FILL,SWT.FILL,true,true);
tabParent.setLayoutData(tabParentData);
tabParent.setLayout(new GridLayout());

FigureCanvas canvas = new FigureCanvas(tabParent);
GridData canvasData = new GridData(SWT.FILL,SWT.FILL,true,true);
canvas.setLayoutData(canvasData);

//diagramContents is an IFigure from draw2d. it holds other IFigures, Labels, ect.
//Essentially everything being displayed
canvas.setContents(diagramContents);

//This method is what creates everything being displayed (the stuff in diagramContents)
refreshDisplayFromModel();

canvas.pack();
tabParent.pack();
}

最佳答案

扔掉 GridLayoutGridData 并尝试将 FillLayout 设置到 tabParent 上,如下所示:

form.getBody().setLayout(new FillLayout()); //*

Composite tabParent = managedForm.getToolkit().createComposite(form.getBody());
tabParent.setLayout(new FillLayout());

FigureCanvas canvas = new FigureCanvas(tabParent);
//no layouting
canvas.setContents(diagramContents);

FillLayout 不需要约束对象,只需让它的子对象抓取所有内容。如果您有多个 child ,我建议您看看 RowLayout 来了解简单的内容,使用 FormLayout 来了解复杂的内容,而忘记 GridLayout

您也可以摆脱 pack() 调用。

*:由于您还给了 tabParent 一个 GridData 对象,我认为您的表单有一个 GridLayout。也为你摆脱了它。

关于java - SWT:如何让 Composite 自动填充其容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35021591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com