Java SWT:redraw、reskin、update 和 requestLayout(和 pack)之间的区别

Java SWT: Difference between redraw, reskin, update and requestLayout (and pack)

提问人:Johannes1984 提问时间:11/11/2023 更新时间:11/11/2023 访问量:29

问:

谁能向我解释一下方法、、、和的区别吗? 不幸的是,API 文档并没有说明太多的差异。Control.redraw()Control.update()Widget.reskin()Control.requestLayout()Control.pack()

我猜如下:

Control.requestLayout()表示当控件的内容(如标签或文本字段中的文本)发生更改并且其显示的大小/位置不再合适时,计算控件在复合中的大小和位置。 我想我明白了:这只是一部分,或者更确切地说,因为只会改变控件的大小,而不会改变位置。Control.pack()Control.requestLayoutComposite.layout()

Control.redraw()和 :在我看来,这两种方法都只是再次绘制控件,并在操作系统不再正确显示时调用它们。如果大小和位置未更改,则调用这些方法。这两种方法之间的区别在于立即重新绘制控件,而可以在一段时间后重新绘制控件。Control.update()update()redraw()

我不明白什么时候需要打电话。在我看来,这与.Widget.reskin()Control.redraw()

Java 布局 控件 SWT 绘图

评论


答:

1赞 greg-449 11/11/2023 #1

redraw请求在下次运行事件循环时重新绘制控件。大多数情况下,重绘是自动管理的,显式调用很少见 - 通常,如果您正在编写自己的控件扩展。redrawCanvas

update请求立即重新绘制控件 - 在绘制跟踪鼠标拖动的“橡皮筋”等内容时使用。

reskin用于 Eclipse RCP CSS 支持,它不是您通常所说的。

requestLayout只是请求尽快调用该方法。这可能比直接呼叫更快。layoutlayout

pack相当于:

setSize(computeSize(SWT.DEFAULT, SWT.DEFAULT, changed));

它只是将控件设置为计算的大小。

Eclipse SWT 站点也有很多示例和文章。

评论

0赞 Johannes1984 11/11/2023
谢谢。我不得不在表上调用redraw()。原因:有一个主 shell,上面有一个模态 shell,用户在其中确定主 shell 中表的新值。当用户确认新值时,模态 shell 消失了,我将新值作为新行添加到表中。新行在视觉上看起来是空的。只有当用户将鼠标指针悬停在其上或将键盘焦点设置在该值上时,才会显示该值。但是在表上调用 redraw() 会让值立即出现。
0赞 greg-449 11/12/2023
我总是将 JFace 用于表格,所以我不确定是否需要在普通表格上重绘。TableViewer