定制的FieldEditor的布局问题(Eclipse首选项页面)

时间:2019-06-25 13:16:49

标签: eclipse grid-layout preferences

我尝试创建自己的FieldEditor(因为我必须动态填充组合框值)。因此,我的课程扩展了“ FieldEditor”。我的首选项页面需要这些字段中的3个,然后看起来像这样(第二,第三和第四字段编辑器;“选择内核”的编辑器)。

enter image description here

显然布局有问题。所有字段都应该看起来像第三个字段-使用完整的空格。

UserControl

我什至尝试了不使用组的简单布局,但后来我的所有字段编辑器仅使用了2个网格单元(其他字段编辑器给出了3列,看上去有点可笑。

我不知道如何解决它。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

您要在两个控件上设置GridDatagd)的相同实例-不允许 。您必须为每个控件创建一个新的GridData

无论如何,您都不应该在parent组合上设置布局数据-这不属于您的代码。

答案 1 :(得分:0)

我有一个解决方案,但我不知道它是否正确:

1)我犯了一个错误,即使用相同的父级创建该页面的所有FieldEditor,尽管文档说要使用getFieldEditorParent()

为每个字段编辑器检索一个新的父级。

2)我想我误解了adjustForNumColumns(int numColumns)的含义。我认为,它应该适应受列数变化影响的控件的horizo​​ntalSpan。现在我的代码如下:

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