Eclipse SWT文本框会改变大小

时间:2017-01-17 14:35:15

标签: java layout eclipse-plugin swt

我有一个Eclipse插件应用程序(十年前的代码,没有文档等)放在我的腿上,在添加新功能时,我注意到当面板调整大小时,文本框会改变拖动分隔符时连续调整大小。This is what it should look like

After resizing

正如您在第二张图片中看到的那样,文本框是随机大小的。 SWT中是否有设置可以防止这种情况发生?

这是我如何创建其中一个文本框。其他基本上是克隆:

    Font font = parent.getFont();
    setLayout(new FillLayout());

    SashForm sashForm = new SashForm(this, SWT.VERTICAL);

    FormToolkit toolkit = new FormToolkit(getParent().getDisplay());
    Section section = toolkit.createSection(sashForm,
            Section.DESCRIPTION | ExpandableComposite.TITLE_BAR | ExpandableComposite.EXPANDED);
    section.setLayoutData(new GridData(GridData.FILL_BOTH));
    section.setLayout(new GridLayout());
    section.setText("Section Title");
    Composite controlComposite = toolkit.createComposite(section);
    GridLayout controlLayout = new GridLayout();
    controlLayout.numColumns = 2;
    controlLayout.verticalSpacing = 20;
    controlComposite.setLayout(controlLayout);
    section.setClient(controlComposite);

    Font bold = ResourceManager.getBoldFont(font);

    Label textLabel = toolkit.createLabel(controlComposite, "Title:", SWT.BOLD);
    GridData gd = new GridData();
    gd.horizontalSpan = 1;
    textLabel.setLayoutData(gd);
    textLabel.setFont(bold);

    textBox = new ExtendedText(controlComposite, SWT.BORDER | SWT.SINGLE, false);
    gd = new GridData(GridData.FILL_HORIZONTAL);
    gd.horizontalSpan = 1;
    gd.verticalSpan = 2;
    textBox.setLayoutData(gd);

ExtendedText类是StyledText的扩展。其重点是:

    GridData gd_bg = new GridData(GridData.FILL_BOTH);
    setLayoutData(gd_bg);

    final GridLayout gridLayout = new GridLayout();
    gridLayout.verticalSpacing = 0;
    gridLayout.marginWidth = 0;
    gridLayout.marginHeight = 0;
    gridLayout.horizontalSpacing = 0;
    gridLayout.numColumns = 1;
    gridLayout.makeColumnsEqualWidth = true;

    sashForm.setWeights(new int[] { 1, 1 });

1 个答案:

答案 0 :(得分:1)

好的,在深入挖掘后,我按预期工作了。

首先,现在使用

创建controlComposite和controlLayout对象
Composite controlComposite = new Composite(section, SWT.NONE)
controlComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
controlComposite.setBackground(section.getBackground());
GridLayout controlLayout = new GridLayout(2, true);
controlLayout.marginHeight = 20;
controlLayout.marginWidth = 0;
controlLayout.verticalSpacing = 10;
controlLayout.horizontalSpacing = 0;
controlComposite.setLayout(controlLayout);
section.setClient(controlComposite);

一旦我这样做,事情开始趋于稳定。我最后调整了权重:

sashForm.setWeights(new int[] { 2, 3 });

它并不完美,但它现在也会这样做。

感谢@ greg-449和@Baz看看