【问题标题】:Eclipse SWT Text Boxes change sizeEclipse SWT 文本框改变大小
【发布时间】:2017-06-01 16:11:40
【问题描述】:

我有一个 Eclipse 插件应用程序(十年前的代码,没有文档等)掉在我的腿上,在向它添加新功能时,我注意到当面板调整大小时,文本框会发生变化在拖动分隔符的同时不断调整大小。

正如您在第二张图片中看到的那样,文本框的大小是随机的。 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 });

【问题讨论】:

  • 您需要发布用于创建 Text 对象的代码,如果有处理调整大小的代码,您也需要发布该代码。
  • 好点。我一会儿更新
  • 你真的需要给我们看minimal reproducible example,因为这样的代码是不够的。例如,最后一个 gridLayout 不做任何事情,除非它在某处设置为控件的布局。您似乎有一个 ViewPart 包含一个表单,并且从外观上看它是否是一个部分。这里有很多互动无法从您展示的内容中确定。
  • 我必须小心我发布的代码(对专有信息的引用)。我会看看我能做什么。
  • @ChrisClark 正如前面提到的那样,它必须是 MCVE,即尝试在独立的 SWT 应用程序中重现您的问题。包含尽可能少的代码,但尽可能多地包含。

标签: java layout eclipse-plugin swt


【解决方案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 观看

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-24
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    相关资源
    最近更新 更多