Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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 添加项目后阻止Jface向导列表调整窗口大小_Java_Swt_Jface - Fatal编程技术网

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

Java 添加项目后阻止Jface向导列表调整窗口大小,java,swt,jface,Java,Swt,Jface,我有这样的向导列表: 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)

我有这样的向导列表:

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

}
而且还像这样:

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

可能类似以下情况(未测试):


你能添加一些小的代码示例吗,因为我是新手,可能会用错误的方式来做:)
SashForm sashForm = new SashForm(control, SWT.CENTER);
SashForm sashForm2 = new SashForm(sashForm, SWT.VERTICAL);
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);