添加项目后防止 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);
我有这样的向导列表:
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);