Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Отрисовка круга


Автор: Su_ 17.2.2010, 18:42
Всем доброго дня.
Решил сделать, мигающий круг по координатам.. Сразу стал вопрос с repaint() . Но я сделал так : у меня есть таймер ,который тикает каждую секнуду , обновляя время на панели , я в него запихнул такой код:
Код

 while(true) {
           setTime();
           if(drawing==1)
           {
                     gr.setColor(Color.RED);
                 preview_sectors();
                     drawing=2;
             
           }else if(drawing==2)
           {
            // gr.clearRect(lblImage.getX(), lblImage.getY(), 70, 70);
               gr.setColor(Color.BLUE);
              preview_sectors();
              drawing=1;
           }else if (drawing==3)
           {
        repaint();
        drawing=0;
           }

метод preview_sectors рисует кружки :
Код

public void preview_sectors()
 {
gr.drawOval(x-(x_height/2), y-(y_height/2),x_height, y_height);
     }
     


В итоге , по кнопочке делаем глобальную переменную drawing=1 и она начинает мигать, =3 останавливается и стирается.. 
Пытался сделать через clearRect, но кружок отображается на картинке , и прямоугольник затирает и её.... Все вроде бы работает как нужно, но тут Вопрос??? Будет ли такой ход давать нагрузку на память? ( ведь по логике мы наслаиваем круги разных цветов) ... Заранее спасибо.!

Автор: Christoph 17.2.2010, 22:25
Я плохо разбираюсь в Java, но может этот код выполнять в отдельном потоке?

Автор: Su_ 17.2.2010, 23:18
да конечно) иначе бы весь SWING виснул бы , но вопрос заключается немного не в этом.. Тут идет наслаивание картинок , то синяя , то красная - создается эффект мигающего круга,  вопрос будет ли каждый объект сохранятся в памяти и в итоге перегружать её ?

Автор: jk1 17.2.2010, 23:25
Цитата

будет ли каждый объект сохранятся в памяти и в итоге перегружать её ? 

Если вы будете сохранять ссылки на эти объекты, то они будут оставаться в памяти. Если нет, сборщик мусора их соберет.

Если это вас не убеждает, воспользуйтесь профайлером. Это специальный инструмент для мониторинга поведения работающего приложения, в том числе и потребления оперативной памяти. Для ваших задач более чем достаточно стандартного профайлера из комплекта JDK - VisualVM.
http://habrahabr.ru/blogs/java/61857/ подробно описано, как им воспользоваться.

Автор: Su_ 18.2.2010, 00:39
спасибо ,посмотрю. А можно ли как то в ручную удалить объект , типа Oval?

Автор: Su_ 18.2.2010, 02:32
user posted image

Программка очень полезная, спасибо, а главное удобная..  Вот такой результат получил , только при другой активности программы есть скачок CPU, а если оставить просто мигание , то CPu идет ровно, по крайне мере не растет. Думаю что можно сделать вывод, что для реализации подобной анимации , такой метод годится)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)