【问题标题】:How can SWT layout resize (grow/shrink) based on contentSWT 布局如何根据内容调整大小(扩大/缩小)
【发布时间】:2016-08-18 00:23:48
【问题描述】:

我的 RCP 应用程序中有一个资源管理器,我在其中添加了一个带有 RowLayout 的内部组合来显示各种类别项。当资源管理器的宽度调整大小时,我希望类别项换行到新行并扩展其父复合的大小。

如果我用默认值初始化我的内部组合,什么都不会发生,甚至不会发生包装。如果我将它设置为抓取垂直空间,它会占用一半空间,将另一半留给树,这很丑陋,不是想要的。如果我设置提示,我会换行,但它的复合大小永远不会改变,因此隐藏了下一行。我尝试添加一个调整大小事件侦听器并调整我的内部复合材料的大小。这允许我调整它的大小并显示所有行,但它会覆盖并隐藏树的一部分。我尝试为树本身做一个 setLocation 和 setSize 以相应地移动/调整它但无济于事,它不会改变。

如何使它工作。我错过了什么。难道没有一种简单的方法来要求一个布局,该布局将使用所需的最小高度,而不是更多,但如果需要可以调整?

感谢您的帮助。

代码如下:

    innerComposite = new Composite(parent, SWT.NONE);
    innerComposite.addListener(SWT.Resize, listenerComp);
    GridDataFactory.fillDefaults().hint(10, 30).applyTo(innerComposite);
    GridLayoutFactory.fillDefaults().applyTo(innerComposite);

Listener listenerComp = new Listener() {
  public void handleEvent(Event event) {
    Widget widget = event.widget;
    Composite comp = (Composite)widget;
    Composite parent = comp.getParent();
    Point parentSize = parent.getSize();
    Point size = comp.computeSize(parentSize.x, SWT.DEFAULT);
    comp.setSize(size);
  }
}

这是一张图片:

调整大小后(注意树的第一行被遮住了):

【问题讨论】:

  • 如果您可以发布一个 MCVE 来显示您的问题,这将有所帮助。

标签: java eclipse layout resize swt


【解决方案1】:

当您使用 Layouts 时,调用 setSize(或 setBounds)会弄乱已设置的布局。

相反,您应该调用 layout(true)(甚至是 Composite 上的 layout(true, true),它同时拥有 Tree 和您的 innerComposite

【讨论】:

  • 我试过但没有成功。现在我正在尝试在调整大小侦听器中设置高度或最小高度的提示,然后按照您的建议调用布局,但没有任何反应。我是否在正确的地方正确地做到了这一点?
猜你喜欢
  • 1970-01-01
  • 2012-05-31
  • 1970-01-01
  • 2023-02-04
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 2014-04-29
相关资源
最近更新 更多