Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Анимация и repaint() 
V
    Опции темы
Гебельс
Дата 24.2.2007, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 24.2.2007

Репутация: нет
Всего: нет



 smile  может подскажете как освободить ресурсы процессора?

Код

import javax.swing.*;
import java.awt.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.*;
import java.util.Calendar;
import java.text.SimpleDateFormat;
public class TransparentClock extends JWindow
       implements MouseMotionListener, FocusListener 
{
 private String s;
 private Thread thr;
 Image img, img2;
 Graphics graph;
 Point mp;
 public TransparentClock() 
 {
  addMouseMotionListener(this);
  setBounds(100, 100, 220, 20);
  capture();
  setVisible(true);
  addFocusListener(this);

  thr=new Thread()
  {
   public void run()
   {
    while(true)
    {
     setTime();
     try
     {
      Thread.sleep(500);
     }
     catch(Exception e){}
    }
   }
  };
  thr.start();
 }
 public void setTime()
 {
  SimpleDateFormat sdf=new SimpleDateFormat("EEEEE dd.MM.yyyy HH:mm:ss");
  s=sdf.format(Calendar.getInstance().getTime());
 }
 public void focusGained(FocusEvent fe) 
 {
  Point p = getLocation();
  setLocation(11111, 0);
  capture();
  setLocation(p);
 }
 public void focusLost(FocusEvent fe) 
 {
 }
 public void capture() 
 {
  Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
  try 
  {
   Robot r = new Robot();
   Rectangle rect = new Rectangle(0, 0, d.width, d.height);
   img = r.createScreenCapture(rect);
  } 
  catch (AWTException awe) 
  {
  }
 }

 public void mouseDragged(MouseEvent m) 
 {
  Point p = m.getPoint();
  int x = getX() + p.x - mp.x;
  int y = getY() + p.y - mp.y;
  setLocation(x, y);
  Graphics g = getGraphics();
  paint(g);
 }
 public void mouseMoved(MouseEvent m) 
 {
  mp = m.getPoint();
 }
 public void paint(Graphics g) 
 {
  if (img2 == null) 
  {
   img2 = createImage(getWidth(), getHeight());
   graph = img2.getGraphics();
  }
  graph.drawImage(img, 0, 0, getWidth(), getHeight(),
              getX(), getY(), getX() + 
              getWidth(), getY() + getHeight(), null);
  graph.setColor(Color.GREEN);
  graph.setFont(new Font("Serif",Font.BOLD+Font.ITALIC,16));
  repaint();
  while(true)
  {
    graph.drawString(s,10,16);
    g.drawImage(img2, 0, 0, null);
    repaint();
    break;
  }       
 }
 public static void main(String[]args) 
 {
  new TransparentClock();
 }
}


PM MAIL   Вверх
LSD
Дата 24.2.2007, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Убери цикл из метода paint().


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Гебельс
Дата 26.2.2007, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 24.2.2007

Репутация: нет
Всего: нет



Цитата

Убери цикл из метода paint().

не получается.
без repaint() часы стоят на одном месте. если таскать по экрану - идут, перестанешь таскать - опять стоят.
Код

import javax.swing.*;
import java.awt.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.*;
import java.util.Calendar;
import java.text.SimpleDateFormat;
public class TransparentClock extends JWindow
       implements MouseMotionListener, FocusListener 
{
 private String s;
 private Thread thr;
 Image img, img2;
 Graphics graph;
 Point mp;
 public TransparentClock() 
 {
  addMouseMotionListener(this);
  setBounds(100, 100, 240, 20);
  capture();
  setVisible(true);
  addFocusListener(this);

  thr=new Thread()
  {
   public void run()
   {
    while(true)
    {
     setTime();
     try
     {
      Thread.sleep(500);
     }
     catch(Exception e){}
    }
   }
  };
  thr.start();
 }
 public void setTime()
 {
  SimpleDateFormat sdf=new SimpleDateFormat("EEEEE dd.MM.yyyy HH:mm:ss");
  s=sdf.format(Calendar.getInstance().getTime());
 }
 public void focusGained(FocusEvent fe) 
 {
  Point p = getLocation();
  setLocation(11111, 0);
  capture();
  setLocation(p);
 }
 public void focusLost(FocusEvent fe) 
 {
 }
 public void capture() 
 {
  Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
  try 
  {
   Robot r = new Robot();
   Rectangle rect = new Rectangle(0, 0, d.width, d.height);
   img = r.createScreenCapture(rect);
  } 
  catch (AWTException awe) 
  {
  }
 }

 public void mouseDragged(MouseEvent m) 
 {
  Point p = m.getPoint();
  int x = getX() + p.x - mp.x;
  int y = getY() + p.y - mp.y;
  setLocation(x, y);
  Graphics g = getGraphics();
  paint(g);
 }
 public void mouseMoved(MouseEvent m) 
 {
  mp = m.getPoint();
 }
 public void paint(Graphics g) 
 {
  img2 = createImage(getWidth(), getHeight());
  graph = img2.getGraphics();
  graph.drawImage(img, 0, 0, getWidth(), getHeight(),
              getX(), getY(), getX() + 
              getWidth(), getY() + getHeight(), null);
  graph.setColor(Color.GREEN);
  graph.setFont(new Font("Serif",Font.BOLD+Font.ITALIC,16));

  repaint();

  graph.drawString(s,10,16);
  g.drawImage(img2, 0, 0, null);
 }

PM MAIL   Вверх
LSD
Дата 26.2.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Посмотри в примеах к JDK - JDK\demo\applets\Clock, как там реализованы часы.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Гебельс
Дата 27.2.2007, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 24.2.2007

Репутация: нет
Всего: нет



Цитата

Посмотри в примеах к JDK - JDK\demo\applets\Clock, как там реализованы часы.

посмотрел. там вывод предыдущей секунды (цифры и стрелки) заменяются на цвет фона. они становятся невидимыми (сливаются с фоном) и выводится новая секунда. а у меня фон прозрачный...  
 smile 
может быть делать шрифт нулевого размера? 
какой то глюк в методе repaint()  smile 


PM MAIL   Вверх
LSD
Дата 27.2.2007, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Цитата(Гебельс @ 27.2.2007,  13:54)
посмотрел. там вывод предыдущей секунды (цифры и стрелки) заменяются на цвет фона. они становятся невидимыми (сливаются с фоном) и выводится новая секунда. а у меня фон прозрачный...  
 smile 
может быть делать шрифт нулевого размера? 
какой то глюк в методе repaint()  smile

Это тут не при чем.
Еще раз: никаких repaint() и бесконечных циклов в методе paint()! Метод paint() должен нарисовать компонент и его дочерние компоненты и все, ничего другого он делать не должен!

А пример я тебе привел для того, чтобы ты посмотрел как делается анимация, там есть внешний поток который обновляет данные и переодически вызывает перерисовку апплета. Вот так и сделай.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Гебельс
Дата 27.2.2007, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 24.2.2007

Репутация: нет
Всего: нет



тема перемещена. я не против. это я по привычке в чужую со своим вопросом залез - на других форумах не приветствуется создание новых тем.


в общем суть понятна. буду пробовать. спасибо.
PM MAIL   Вверх
LSD
Дата 27.2.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Цитата(Гебельс @  27.2.2007,  15:08 Найти цитируемый пост)
тема перемещена. я не против. это я по привычке в чужую со своим вопросом залез - на других форумах не приветствуется создание новых тем.

Просто твой вопрос не имеет к той теме, никакого отношения. Поэтому я и разделил темы.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Гебельс
Дата 28.2.2007, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 24.2.2007

Репутация: нет
Всего: нет



 smile 

этот долбаный repaint() нужно было поставить в метод run(), и всё

 smile 

Это сообщение отредактировал(а) Гебельс - 28.2.2007, 14:43
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0849 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.