有人可以向我解释一下方法
Control.redraw()
,Control.update()
,Widget.reskin()
,Control.requestLayout()
和Control.pack()
的区别吗?
不幸的是,API 文档并没有详细说明这些差异。
我猜想如下:
Control.requestLayout()
表示当 Composite 中控件的内容(如标签或文本字段中的文本)发生更改且其显示的大小/位置不再合适时,计算该控件的大小和位置。
我想我理解Control.pack()
:它只是Control.requestLayout
的一部分,或者更确切地说是Composite.layout()
,因为只有控件的大小会改变,但位置不会改变。
Control.redraw()
和Control.update()
:在我看来,这两种方法都只是再次绘制控件,然后当操作系统不再正确显示控件时调用它们。如果大小和位置未更改,则调用这些方法。两种方法之间的区别在于 update()
立即重新绘制控件,而 redraw()
可以在一段时间后重新绘制控件。
我不明白什么时候需要打电话
Widget.reskin()
。我觉得和Control.redraw()
一样。
redraw
请求下次事件循环运行时重绘控件。
update
请求立即重绘控件 - 在绘制诸如跟踪鼠标拖动的“橡皮筋”之类的东西时使用。
reskin
用于 Eclipse RCP CSS 支持,它不是您通常会调用的东西。
requestLayout
只是请求尽快调用layout
方法。这可能比直接调用 layout
更快。
pack
相当于:
setSize(computeSize(SWT.DEFAULT, SWT.DEFAULT, changed));
它只是将控件设置为计算出的大小。