gpt4 book ai didi

Java SWT GC 未在 Canvas 上绘制文本

转载 作者:行者123 更新时间:2023-12-02 06:17:00 26 4
gpt4 key购买 nike

我有以下代码:

   final Canvas canvas = new Canvas(mainshell, SWT.NO_REDRAW_RESIZE);

canvas.setBounds(0, 0, mainshell.getSize().x, mainshell.getSize().y);

canvas.setBackgroundImage( new Image(display, "BlueBack.jpg" ));
canvas.setFont(font);

GC gc = new GC(canvas);

gc.drawText("Test", 0, 0, true);

gc.dispose();

canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {

e.gc.drawText("String", 170, 30, true);

e.gc.drawText("Another Unimportant String", 80, 90, true);


int I = 140;
int i = 1;

String[] strings = Stuff.getUnimportantStringArray();

if(strings != null)
for(String string : strings){

e.gc.drawText( i + " " + string , 120, I, true);

I += 50;
i++;

}

}
});

我遇到问题的代码是这样的:

 GC gc = new GC(canvas);

gc.drawText("Test", 0, 0, true);

gc.dispose();

gc.drawText(); 没有像我预期的那样在 Canvas 上绘制字符串 "Test"

这是我的问题:

为什么 gc.drawText("Test", 0, 0, true"); 不起作用,但 e.gc.drawText("String", 170, 30 , true); 内的 PaintListener 是否正常工作?

最佳答案

只要 Canvas 需要重新绘制,就会调用 paintControl() 方法,这种情况可能会发生任意多次。例如,在调整 Canvas 大小时使用 PaintListener(尝试在 paintControl() 上放置断点,调整窗口大小,然后亲自查看)。您需要执行的所有绘图都应该在 PaintListener 中。

此外,您不应在此处使用 setBounds()。使用布局代替:

mainShell.setLayout(new FillLayout());

关于Java SWT GC 未在 Canvas 上绘制文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21363394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com