现在,我正在阅读Eclipse4插件开发示例,在第一个示例中,画布上的时钟将每隔一秒使用canvas.redrawn()
移动,它总是显示一秒钟,现在我想要让画布显示1秒钟,一秒钟后显示2秒钟...... 60秒后它将是60秒钟。
现在,在这段代码中,我使用SWT.NO_BACKGROUND
作为新的Canvas而不是SWT.NONE
,它在Windows中可以正常,但在Linux上它总是显示一秒钟。
还有其他方法可以保持画布上的前一个绘图不干净,并且可以在同一个画布上绘制新内容。 非常感谢。
public class ClockView extends ViewPart {
public void createPartControl(Composite parent) {
final Canvas clock = new Canvas(parent, SWT.NONE);
clock.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
int seconds = new Date().getSeconds();
int arc = (15 - seconds) * 6 % 360;
Color blue = e.display.getSystemColor(SWT.COLOR_BLUE);
e.gc.setBackground(blue);
e.gc.fillArc(e.x, e.y, e.width - 1, e.height - 1, arc - 1,
2);
new Thread("TickTock") {
public void run() {
while (!clock.isDisposed()) {
clock.getDisplay().asyncExec(new Runnable() {
public void run() {
if (clock != null
&& !clock.isDisposed())
clock.redraw();
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
return;
}
}
}
}.start();
}
});
}
答案 0 :(得分:0)
SWT.NO_BACKGROUND
用于通过不重绘背景来减少闪烁,但不保证保留您之前绘制的内容,例如参见this Eclipse bug中的最后一条注释。 SWT.NO_BACKGROUND
的确切行为确实因平台而异。
您需要在每个绘画请求上绘制所有内容。