我尝试创建自己的FieldEditor(因为我必须动态填充组合框值)。因此,我的课程扩展了“ FieldEditor”。我的首选项页面需要这些字段中的3个,然后看起来像这样(第二,第三和第四字段编辑器;“选择内核”的编辑器)。
显然布局有问题。所有字段都应该看起来像第三个字段-使用完整的空格。
UserControl
我什至尝试了不使用组的简单布局,但后来我的所有字段编辑器仅使用了2个网格单元(其他字段编辑器给出了3列,看上去有点可笑。
我不知道如何解决它。有人可以帮忙吗?
答案 0 :(得分:0)
您要在两个控件上设置GridData
(gd
)的相同实例-不允许 。您必须为每个控件创建一个新的GridData
。
无论如何,您都不应该在parent
组合上设置布局数据-这不属于您的代码。
答案 1 :(得分:0)
我有一个解决方案,但我不知道它是否正确:
1)我犯了一个错误,即使用相同的父级创建该页面的所有FieldEditor,尽管文档说要使用getFieldEditorParent()
2)我想我误解了adjustForNumColumns(int numColumns)
的含义。我认为,它应该适应受列数变化影响的控件的horizontalSpan。现在我的代码如下:
@Override
protected void adjustForNumColumns(int numColumns) {
((GridData) c_kernelCombo.getLayoutData()).horizontalSpan = numColumns-1;
}
@Override
protected void doFillIntoGrid(Composite parent, int numColumns) {
// kernel spec combo
Label comboLabel = new Label(parent, SWT.NONE);
comboLabel.setText("Select kernel");
GridData gd = new GridData(SWT.LEFT, SWT.TOP, false, false);
gd.horizontalSpan = 1;
comboLabel.setLayoutData(gd);
c_kernelCombo = new Combo(parent, SWT.READ_ONLY);
gd = new GridData(SWT.FILL, SWT.TOP, true, false);
gd.horizontalSpan = numColumns - 1;
c_kernelCombo.setLayoutData(gd);
}