Как отложить между чертежами в Java-апплете - PullRequest
0 голосов
/ 25 июня 2011

Я пишу программу для ввода числа и рисования этого количества кружков случайного цвета и расположения в апплете.Я не спал всю ночь, пытаясь выяснить, как добавить задержку между каждым появлением кругов.Прямо сейчас, если у меня есть оператор для каждого с задержкой в ​​нем, и я говорю, что я ввел 20 кругов и имею задержку 1000, он не будет ничего делать в течение 20 секунд, тогда все круги появятся одновременно, потому чтоэкран не обновляется до конца метода paint ().

Единственная другая альтернатива, о которой я мог подумать, - это иметь для каждого оператора выражение start (), которое добавит цвет икоординаты массива и метод paint () рисует все круги в этом массиве.Я могу ошибаться, но я мог бы предположить, что это заняло бы слишком много памяти.

Другой возможностью было бы просто добавить кружок к существующему кадру, не очищая его, но я не смог найтиспособ сделать это.

Ответы [ 2 ]

3 голосов
/ 25 июня 2011

Используйте javax.swing.Timer для добавления нового объекта Circle в расширяемый список, например ArrayList. Звоните repaint() после каждого добавления. В paintComponent(Graphics) рисуем каждый Circle в списке.


Обновление

К сожалению, сейчас я не могу добавлять комментарии (см. Внешний JS не смог загрузить для подробностей). По этой причине я добавляю это как правку.

@ mKorbel: Нет, я точно не пробовал его на 1.6.0_26! Если бы я попробовал это вообще, я бы опубликовал код. ;)

@ Tycho: Я не заметил, что вы добавили тег и предположили, что вы работаете с Swing.

Вы действительно используете AWT? (Если так.) Почему?


@ Tycho: «Единственное, что я мог сказать, быстро выполнив поиск, - это то, что Swing больше используется для пользовательских интерфейсов, а это не то, что я здесь собираюсь».

Умм .. Оба AWT и Swing (с использованием Applet / JApplet или Frame / JFrame) используются для разработки графических пользовательских интерфейсов. Или, другими словами, будь то использование AWT или Swing, разработка апплета или свободно плавающего фрейма, вы разрабатываете пользовательский интерфейс (G).

Либо апплет расширяется java.applet.Applet (AWT) или javax.swing.JApplet (Swing).

Если ваш апплет расширяется Applet, измените его на Swing JApplet. Немногие разработчики графического интерфейса могут даже вспомнить AWT достаточно хорошо, чтобы дать ему хороший совет. Мой совет был связан с JApplet / Swing. Это не будет работать с использованием AWT.

0 голосов
/ 25 июня 2011

Используйте таймер.Например, когда вы начинаете рисовать ваши круги, установите значение:

   time_press = System.currentTimeMillis();
   circles_to_draw = 20;

Затем где-нибудь в вашем методе рисования сделайте следующее:

while(circles_to_draw > 0 && System.currentTimeMillis() < time_press + 1000)
{
    time_press += 1000;
    circles_to_draw --;

    //Draw your circle
}
...