【问题标题】:SWT label size is not correctly updatedSWT 标签大小未正确更新
【发布时间】:2011-09-26 12:16:34
【问题描述】:

我是 Java/SWT 的新手。我在使用 SWT label 时遇到了一些麻烦。

当我更新标签上的文本时,它的大小没有正确更新(标签被剪切,尊重原始大小)。但是,如果我在对话框中执行非常小的调整大小,则大小会正确更新。

基本上,我使用默认文本创建标签,然后在加载数据时使用比原始文本更大的真实文本更新标签。

我尝试致电label.update()label.redraw(),但没有成功。

【问题讨论】:

  • 更可能是布局问题。您使用的是哪种布局?如果您期望标签大小发生变化,您应该调用布局重新计算。将新文本设置为标签后尝试调用layoutInstance.layout(true);方法。
  • 你在容器组件上试过invalidate()/validate()吗?

标签: java swt


【解决方案1】:

尝试调用parent.layout(),其中parent 是包含您的标签的Composite。另见Understanding Layouts in SWT

【讨论】:

  • 谢谢,完美运行。我习惯了Winforms。我需要努力阅读有关 swt 的内容。
【解决方案2】:

我知道这是旧的,但为了不丢失可能在控件上设置的任何 LayoutData 设置。你应该打电话给getParent().requestLayout()。该文档特别劝阻getParent().layout() 的用户,因为它会丢失控件上所有缓存的数据设置。

【讨论】:

    【解决方案3】:

    不鼓励使用此方法,因为它是触发布局的效率最低的方法。使用 layout(true) 会丢弃所有缓存的布局信息,即使来自未更改的控件也是如此。在布局中发生更改的每个控件上调用 Control.requestLayout() 比在布局本身上调用此方法效率更高。

    根据getParent().layout() 的文档,您应该在控件本身上调用requestLayout(),而不是像@kingargyle 所说的那样调用其父级。

    我一直做的是label.requestLayout(),它完美无瑕。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 2016-06-03
      • 1970-01-01
      相关资源
      最近更新 更多