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());
Другие вопросы по тегам