Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2012, 13:23   #1
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию Объект Graphics в таймере

Всем привет! Хочу сделать программу, которая будет имитировать светофор, отображаю на фрейме три круга красного, желтого и зеленого цветов , но не получается в таймере создать мигание круга. Таймер работает, проверял с помощью вывода текста в консоль, видимо я неправильно понимаю работу с объектом типа Graphics2D.

Код:
package traffic.light;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JComponent;
import javax.swing.Timer;
import static java.lang.System.out;

public class DrawCircles  extends JComponent
{
    
    @Override public void paintComponent(Graphics graphics)
    {
        g2 = (Graphics2D) graphics;
        double size = 100;
        double top = 180;
        Rectangle2D red = new Rectangle2D.Double(top,50,size,size);
   
        
        Ellipse2D ellipseRed = new Ellipse2D.Double();
        ellipseRed.setFrame(red);
        g2.setPaint(Color.RED);
        g2.fill(ellipseRed);  
        
        Rectangle2D yellow = new Rectangle2D.Double(top, size + 50, size,size);
        Ellipse2D ellipseYellow = new Ellipse2D.Double();
        ellipseYellow.setFrame(yellow);
        g2.setPaint(Color.YELLOW);
        g2.fill(ellipseYellow);
        
        green = new Rectangle2D.Double(top, size + 150, size,size);
        ellipseGreen = new Ellipse2D.Double();
        ellipseGreen.setFrame(green);
        g2.setPaint(Color.BLACK);
        g2.draw(ellipseGreen);
        
        timer.start();
        

    }
     private Timer timer = new Timer(1000, new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) 
            {
                    //out.println("Hello");
                    g2.setPaint(Color.GREEN);// не работает
                    g2.fill(ellipseGreen);
                    g2.setPaint(Color.WHITE);
                    g2.fill(ellipseGreen);
                                                
            }
        });
    {
        flag = true;
    }
     private boolean flag;
     private  Graphics2D g2;
     private Ellipse2D ellipseGreen;
     private Rectangle2D green;
Хочу еще спросить, как можно очистить фигуру после заливки цветом. Заранее благодарен!
Желание тысяча возможностей, нежелание - тысяча причин
Стремящийся вне форума Ответить с цитированием
Старый 02.12.2012, 20:03   #2
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

Проблема решена, правда, не знаю корректно ли. В обработчике событий таймера принудительно вызвал метод перерисовки фрейма repaint(), который вызывает переопределенный метод PaintComponent, правда остается вопрос: при перерисовке фрейма создаются ли заново объекты Rectangle2D, Ellipse2D?. Хочу услышать мнение опытных. Заранее спасибо!

Простите, не подумал! Инициализировал ссылки в конструкторе, чем предотвратил постоянное создание объектов. Вопрос снят!
Желание тысяча возможностей, нежелание - тысяча причин

Последний раз редактировалось Стремящийся; 02.12.2012 в 20:24.
Стремящийся вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# Создание таймера в таймере dasvex Помощь студентам 2 02.11.2012 14:46
копирование в таймере wm_leviathan C# (си шарп) 0 08.12.2011 16:27
Вызвать функцию в таймере Ghennadiy Общие вопросы Delphi 3 06.06.2011 18:40
Переменные в таймере. Alex Cones Win Api 7 06.11.2010 20:54
Повторяющееся событие в таймере kta87 Общие вопросы Delphi 3 21.03.2010 10:08