添加项目后阻止jface向导列表调整窗口大小

6ioyuze2  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(346)

我有这样的向导列表:

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

如果“我的列表”为空,“常规向导”窗口的大小正常。但在添加了一些项目之后:

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);

}

我的向导窗口比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);

正如你所看到的,我必须把一个放在另一个里面。逻辑得到批准,但尺寸会给用户带来一些视觉上的困难:(

e1xvtsh3

e1xvtsh31#

您的列表似乎是 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);

相关问题