Java SWT GC не рисует текст на холсте
У меня есть следующий код:
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();
не рисует строку "Test"
на холсте, как я и ожидал.
Вот мой вопрос:
Почему gc.drawText("Test", 0, 0, true");
не работает, но e.gc.drawText("String", 170, 30, true);
внутри PaintListener
работает?
1 ответ
Решение
paintControl()
Метод вызывается всякий раз, когда необходимо перерисовать холст, что может произойти любое количество раз. Например, PaintListener
используется при изменении размера холста (попробуйте установить точку останова на paintControl()
, измените размер окна и убедитесь сами). Все рисунки, которые вам нужно сделать, должны быть в PaintListener
,
Кроме того, вы не должны использовать setBounds()
Вот. Вместо этого используйте макет:
mainShell.setLayout(new FillLayout());