Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SWT:扩展条的宽度_Java_Eclipse_Widget_Swt_Jface - Fatal编程技术网

Java SWT:扩展条的宽度

Java SWT:扩展条的宽度,java,eclipse,widget,swt,jface,Java,Eclipse,Widget,Swt,Jface,目前,我正在使用SWT,并尝试实现一个expandbar: protected Control createDialogArea(Composite parent) { Composite container = (Composite) super.createDialogArea(parent); ExpandBar bar = new ExpandBar(container, SWT.V_SCROLL); C

目前,我正在使用SWT,并尝试实现一个expandbar:

    protected Control createDialogArea(Composite parent) {
            Composite container = (Composite) super.createDialogArea(parent);

            ExpandBar bar = new ExpandBar(container, SWT.V_SCROLL);

            Composite newConstraint = new Composite(bar, SWT.NONE);
            GridLayout gridLayout = new GridLayout();
            gridLayout.numColumns = 3;
            newConstraint.setLayout(gridLayout);

            Label sourcelbl = new Label(newConstraint, SWT.NONE);
            sourcelbl.setImage(getMyImage("source.png"));
            sourcelbl.setLayoutData(new GridData(GridData.CENTER, GridData.CENTER,
                    true, false));

            Label spacelbl = new Label(newConstraint, SWT.NONE);

            Label targetlbl = new Label(newConstraint, SWT.NONE);
            targetlbl.setImage(getMyImage("target.png"));
            targetlbl.setLayoutData(new GridData(GridData.CENTER, GridData.CENTER,
                    true, false));

            ListViewer lvSource = new ListViewer(newConstraint);
            lvSource.setContentProvider(new ConstraintDialogContentProvider());
            lvSource.setLabelProvider(new ConstraintDialogLabelProvider());
            lvSource.setInput(fm);

            Combo constrainType = new Combo(newConstraint, SWT.NONE);
            constrainType.setItems(new String[] { "require", "exclude" });
            constrainType.setLayoutData(new GridData(GridData.CENTER,
                    GridData.CENTER, true, false));

            ListViewer lvTarget = new ListViewer(newConstraint);
            lvTarget.setContentProvider(new ConstraintDialogContentProvider());
            lvTarget.setLabelProvider(new ConstraintDialogLabelProvider());
            lvTarget.setInput(fm);

            ExpandItem item0 = new ExpandItem(bar, SWT.NONE, 0);
            item0.setText("New Constraint");
            item0.setHeight(newConstraint.computeSize(SWT.DEFAULT, SWT.DEFAULT).y);
            item0.setControl(newConstraint);

omposite existingConstraints = new Composite(bar, SWT.NONE);
        gridLayout = new GridLayout();
        gridLayout.numColumns = 2;
        existingConstraints.setLayout(gridLayout);

            ........

            ExpandItem item1 = new ExpandItem(bar, SWT.NONE, 1);
            item1.setText("Existing Constraints");
            item1.setHeight(existingConstraints.computeSize(SWT.DEFAULT,
                    SWT.DEFAULT).y);
            item1.setControl(existingConstraints);

            item0.setExpanded(true);
            bar.setSpacing(8);

            return container;
        }
那么问题是宽度,它似乎没有被计算:

没有extendbar,一切正常,宽度自动计算:

如何让extendbar计算宽度

干杯,
Phil

ExpandBar大小计算似乎只考虑
ExpandItem
文本的大小,而忽略项目中控件的大小

您必须重写
ExpandBar.computeSize
方法来更改此项(以及
ExpandBar.checkSubclass
来停止拒绝您的子类)


或者您可以在文本末尾包含空格,以便使扩展项的大小模糊。

基于greg-449的答案,我找到了另一个解决方法,即为扩展条设置宽度提示:

    ExpandBar expandBar = new ExpandBar(this, SWT.BORDER);
    GridData gridDataExpandBar = new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1);
    gridDataExpandBar.widthHint = 150;