【问题标题】:How can i repaint a composite in Java (SWT)?如何在 Java (SWT) 中重新绘制复合材料?
【发布时间】:2026-02-12 10:50:01
【问题描述】:

当我在我的 swt 程序中按下一个按钮时,应该绘制一个新的组合。但是只有在我调整窗口大小时才会显示复合。 我的 gui 中有一个复合材料 (compLoad),它被分配了一个新的复合材料

compHELP comHelp_ = new compHELP(compLoad, SWT.RESIZE);

我尝试了redraw(),但没有任何反应

【问题讨论】:

  • compHELP 是什么?它不是 SWT API 的一部分。你扩展Composite吗?

标签: java swt paint composite


【解决方案1】:

添加/移除控​​件时需要重新布局复合体,见

Composite.layout() // uses Composite.layout(true)
Composite.layout(boolean changed) 
Composite.layout(boolean changed, boolean all)

请注意,SWT 中的布局可能缓存其控件的首选大小(由Control.computeSize(int w, int h) 确定)。在添加新组件时,调用layout() 可能就足够了。如果首选大小可能已更改,或者更改发生在子合成中,请使用带有 changed/all 标志的方法以确保正确更新布局。

附注:当Composite 的大小发生变化时,它将自动重新布局(正如您在调整窗口大小时注意到的那样)。

【讨论】:

  • 谢谢!它用 Composite.layout(boolean changed, boolean all) 重新绘制