添加项目后防止 Jface 向导列表调整大小 window

Prevent Jface wizard list resize window after items adding

我有这样的向导列表:

list = new List(sashForm2, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL);

如果我的列表为空,则一般向导 window 具有正常大小。但是在添加了一些项目之后:

for (int i = 0; i < 15; i++) {
    fTypeArrayList.add(new FirstTypeMD(new Random().nextInt(2000) + 500, new Random().nextInt(2000),
            new Random().nextInt(200) + 20, new Random().nextBoolean(), new Random().nextBoolean(),
            new Random().nextInt(200)));

    sTypeArrayList.add(new SecondTypeMD(new Random().nextInt(2000) + 500, new Random().nextInt(2000),
            new Random().nextInt(200) + 20, new Random().nextBoolean(), new Random().nextBoolean(),
            new Random().nextInt(200) + 5, new Random().nextInt(100) + 5));

    thTypeArrayList.add(new ThirdTypeMD(new Random().nextInt(2000) + 500, new Random().nextInt(2000),
            new Random().nextInt(200) + 20, new Random().nextBoolean(), new Random().nextBoolean(),
            new Random().nextInt(3) + 1, new Random().nextInt(3) + 1));

    FirstTypeMD fModeMd = fTypeArrayList.get(i);
    SecondTypeMD sModeMd = sTypeArrayList.get(i);
    ThirdTypeMD thModeMd = thTypeArrayList.get(i);

    list.add("T0 ---> " + fModeMd.energyCons + " " + fModeMd.framePerSec + " " + fModeMd.mass + " "
            + fModeMd.tempRange);
    list.add("T1 ---> " + sModeMd.energyCons + " " + sModeMd.speed + " " + sModeMd.sensorAmount + " "
            + sModeMd.mass + " " + sModeMd.tempRange);

    list.add("T2 ---> " + thModeMd.energyCons + " " + thModeMd.displayDiff + " " + thModeMd.dataProcess + " "
            + thModeMd.mass + " " + thModeMd.tempRange);

}

我的向导 window 高度比 Eclipse 大。我尝试添加一些布局大小调整:

list.setSize(100, 300);

还有这样的事:

GridData gridData = new GridData(GridData.FILL, GridData.FILL, true, true);
gridData.verticalSpan = 4;
int listHeight = list.getItemHeight() * 12;
Rectangle trim = list.computeTrim(0, 0, 0, listHeight);
gridData.heightHint = trim.height;
list.setLayoutData(gridData);

但是并没有帮助我解决这个问题。也许我做错了什么?也许我必须为其容器设置固定大小:

SashForm sashForm = new SashForm(control, SWT.CENTER);
SashForm sashForm2 = new SashForm(sashForm, SWT.VERTICAL);

如您所见,我必须将一个框格嵌进另一个框格中。逻辑已获批准,但尺寸会给用户带来一些视觉困难:(

您的列表似乎是 SashForm 的直接子列表。 SashForm 不使用 GridLayout,因此在列表中设置 GridData 布局数据无效。调用setSize方法也不起作用,因为SashForm会根据自己的计算设置大小。

您可以尝试添加 Composite 作为 SashForm 的直接子代。添加列表作为 Composite 的子项。将GridLayout设置为Composite的布局,然后应使用GridData.heightHint

可能类似于以下内容(未测试):

Composite form2Comp = new Composite(sashForm2, SWT.NONE);
form2Comp.setLayout(new GridLayout());

list = new List(form2Comp, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL);

GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
data.heightHint = ....
list.setLayoutData(data);