2012-01-05 2 views
0

Каков правильный способ получения уведомления после того, как аппликатор Swing завершит рисование? Я пишу какой-то код времени, чтобы измерить, сколько времени занимает апплет, и хотите включить время для отображения любой графики.уведомили, когда Swing закончил рисование

В конце моего метода init(), который выполняет весь чертеж, я прошел через Runnable to SwingUtilities.invokeLater, который спал в течение 10 секунд. Я видел задержку перед отображением графики. Я бы подумал, что задержка произойдет после графики, так как я понял, что она будет поставлена ​​в очередь после вызова чертежа. Я попытался переместить этот код проверки сна, чтобы начать(), и получил те же результаты.

Основываясь на моем тестировании с предупреждающим сообщением javascript, кажется, что событие onload, помещенное в тег тела HTML, также запускается до рисования графики.

+1

* Я прошел в Runnable to SwingUtilities.invokeLater, который спал в течение 10 секунд * - метод invokeLater() используется для добавления кода в EDT для выполнения. Если вы заставляете EDT спать, Swing не может перекрасить себя. – camickr

+0

В чем Ваш вопрос, точно? –

ответ

4

Как правило, метод init() инициализирует компоненты/макет апплета. Фактический чертеж выполнен paint().

Вы можете переопределить метод paint() по телефону super.paint(..) и добавив свой собственный код к нему:

public void paint(Graphics g) { 
    super.paint(g); 
    // Add your code 
} 

Задержка вы заметили потому, что Runnable вы передаете SwingUtilities.invokeLater() вызывается где-то между init() и paint()

+0

my jApplet contentPane имеет один jComponent. Я перепробовал метод paintComponent jComponent и действительно видел задержку после рисования графики. Спасибо за вашу помощь. – rimsky

+0

Ах да, это так. Некоторая контекстная информация: http://docs.oracle.com/javase/tutorial/uiswing/painting/closer.html –

Смежные вопросы