Applet para Simulação de Ondas

Olá pessoal, sou novo por aqui, estou aprendendo um pouco sobre Java, a princípio minha área de interesse é construir Applets para ser usado em explicações didáticas…

Sou desenvolver em outras linguagens, estou estudando Java como auto-ditada, encontrei alguns materiais para estudos, do qual já estou conseguindo fazer algumas coisas…

Enfim, estou tentando desenvolver algumas aplicações que envolvem o estudo sobre EletroMagnetismo, este é um dos códigos que adaptei, no caso seria para simular uma propagação de ondas…

Este é o Código…

import java.applet.*;
import java.awt.*;

public class ExemploOndas extends Applet implements Runnable {
   int width, height;
   int i = 0;
   int x1 = 0;
   int y1 = 0;
   int x2 = 100;
   int y2 = 10;
   Thread t = null;
   boolean threadSuspended;
   
   //Executado quando a Applet é Criado
   public void init() {
      width  = getSize().width;
      height = getSize().height;
      setBackground( Color.black );
   }
   
   //Executado depois que a Applet é criada, e também quando o Browser Retornar a Página Contendo a Applet
   public void start() {
      if ( t == null ) {
         t = new Thread( this );
         threadSuspended = false;
         t.start();
      }
      else {
         if ( threadSuspended ) {  
            threadSuspended = false;
            synchronized( this ) {
               notify();   
            }
         }
      }
   }
   
   //Executado sempre que o navegador deixa a página que contém a Applet
   public void stop() {
      threadSuspended = true;
   }
   
   //Executado juntamente quando a Applet é criada e posta em Loop Infinito
   public void run() {
      try {
         while( true ) {
            //Enquanto a Thead faz algum Trabalho ( Movimento )
            ++i; //Incrementa 1 em i
            if ( i == 10 ) {
               i = 0;
            }
            
            //x1 = x1 + 10; //Incrementa x1 1 em x1, para deslocamente da Coluna Inicial
            y1 = y1 + 20;
            x2 = x2 + 100;
            y2 = y2 + 10;
            
            if (y1 == 800 ) {
               y1 = 20;
               x2 = 100;
               y2 = 10;
            }
            showStatus( "Executado: - Valor de y2 : " + y2);
            
            //Executa a Thread e faz a verificação se deve ser suspenso
            if ( threadSuspended ) {
               synchronized( this ) {
                  while ( threadSuspended ) {
                     wait();
                  }
               }
            }
            
            //Redesenha a Applet
            repaint();
            t.sleep( 500 ); //Intervalo dado em MiliSegundo
         }
      }
      catch ( InterruptedException e ) { }
   }
   
   //Executado sempre que a Applet é chamada para ser Redesenhada
   public void paint( Graphics g ) {
      g.setColor( Color.blue);
      //g.drawLine( width, height, i * width / 10, 0); //Desenha Linha
      //g.fillArc( 120, 70, y2, y2, 0, 360); //Desenha Circulo, ou Elipse com preenchimento
      //g.fillOval( 120, 70, y2, y2 ); //Desenha Circulo com Preenchimento
      g.drawOval( 120, 70, y2, y2 ); //Desenha Círculo Sem Preenchimento
   }
}

Neste caso, o circulo se expande, porém fica somente o último, gostaria que ficasse de forma progressiva, ou seja, o primeiro circulo se expande, em seguida surge outro, e assim sucessivamente, dando a idéia do movimento de progagação de ondas…

Alguém poderia dar uma dica de como posso resolver isto dentro desta estrutura?

Obrigado pela atenção,

José Aparecido

Se entendi o que você quer fazer, uma solução simples seria você desenhar não apenas 1, mas vários círculos dentro dessa thread, sempre calculando o tamanho de cada um deles. Se algum deles for muito pequeno, você só não desenha.

Abraço.

Olá, obrigado pelo retorno…

Seria este o ponto, construir círculos que se expandam um após o outro, mas como disse Java ( ou computação gráfica ) é novo pra mim, não entendi muito bem em que momento poderia chamar a função paint(), de maneira que o objeto anterior continuasse a ser desenhado, na medida que se desenha outro, e assim por diante…

Se souber onde posso pesquisar a respeito disso, seria de grande ajuda…

Obrigado

Seria interessante você dar uma lida nos artigos de java do Ponto V (http://pontov.com.br/site/java).

A ideia que você precisa ter é similar à apresentada aqui: http://pontov.com.br/site/java/48-java2d/121-o-loop-de-animacao. Basicamente, você mantém sua aplicação em loop (que pode ser uma thread) e atualiza as posições, desenhando em seguida. Os outros tutoriais do Ponto V também podem ser bastante úteis, já que tratam de desenho em Java.

Abraço.

OK, valeu a dica!

Obrigado…