java - Eclipse SWT 文本框更改大小

标签 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);

ExtendText 类是 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 });

最佳答案

好吧,在深入研究之后,我发现它按预期工作了。

首先,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 的浏览

关于java - Eclipse SWT 文本框更改大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41699822/

相关文章:

java - java.util.Map 条目集的问题

java - JCheckboxes 到 JScrollPane 中

eclipse-plugin - 在自定义悬停内显示链接(Eclipse 插件开发)

java - 导出向导出现错误

java - 如何手动添加插件到现有的eclipse项目?

java - Spring Data - MongoDb - 如果我更新同一文档两次会发生什么

java - Android getIntent().getExtras() 返回 null

java - 如何在android线性布局中对齐父底部?

android - 如何在android布局中制作带有圆角的背景图像?

java - 使用 Swing 动态重新排列布局