首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定制FieldEditor的布局问题(Eclipse首选项页面)

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

Stack Overflow用户
提问于 2019-06-25 21:16:50
回答 2查看 66关注 0票数 0

我尝试创建自己的FieldEditor (因为我必须动态填充combobox值)。所以我的类扩展了'FieldEditor‘。我的首选项页面需要3个这样的字段,然后看起来像这样(第二,第三和第四个字段编辑器;‘选择内核’的)。

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

代码语言:javascript
复制
@Override
protected void adjustForNumColumns(int numColumns) {
    ((GridData) c_top.getLayoutData()).horizontalSpan = numColumns;
}

@Override
protected void doFillIntoGrid(Composite parent, int numColumns) {

    /* Layout comments:
     * 
     * component are sequentially filled into numColumns
     * by default each component will use 1 column
     * GridData can be set to use more that one columns
     */

    GridData gd = new GridData(SWT.FILL, SWT.TOP, true, false);
    gd.horizontalSpan = numColumns;

    c_top = parent;
    c_top.setLayoutData(gd);

    c_group = new Composite(c_top, SWT.BORDER);

    GridLayout newgd = new GridLayout(2, false);
    c_group.setLayout(newgd);
    c_group.setLayoutData(gd);

    // kernel spec combo

    Label comboLabel = new Label(c_group, SWT.NONE);
    comboLabel.setText("Select kernel");
    gd = new GridData(SWT.LEFT, SWT.TOP, false, false);
    gd.horizontalSpan = numColumns - 1;
    comboLabel.setLayoutData(gd);

    c_kernelCombo = new Combo(c_group, SWT.READ_ONLY);
    gd = new GridData(SWT.FILL, SWT.TOP, true, false);
    //gd.horizontalSpan = 1;
    c_kernelCombo.setLayoutData(gd);     
}

我甚至尝试了一个不使用组的更简单的布局,但是我所有的字段编辑器只使用了网格的2个单元格(这看起来有点滑稽,因为其他字段编辑器给出了3列)。

我不知道如何修复它。有人能帮帮忙吗?

EN

回答 2

Stack Overflow用户

发布于 2019-06-25 21:28:19

您正在两个控件上设置相同的GridData (gd)实例-这是,不允许。必须为每个控件创建一个新的GridData

在任何情况下,您都不应该在parent组合上设置布局数据-这不属于您的代码。

票数 0
EN

Stack Overflow用户

发布于 2019-06-26 15:38:51

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

1)我犯了一个错误,使用相同的父项创建了该页面的所有FieldEditors,尽管文档说要使用getFieldEditorParent()为每个字段编辑器检索一个新的父项

2)我想,我误解了adjustForNumColumns(int numColumns)的意思。我认为,它应该适应受列数变化影响的控件的horizontalSpan。现在我的代码看起来像这样:

代码语言:javascript
复制
@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);     
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56754998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档