JAVA – APLICAÇÕES GRÁFICAS Propriedades Utilizadas

Propaganda
JAVA – APLICAÇÕES GRÁFICAS
Propriedades Utilizadas:
ANIMATION
FACULDADE DE TECNOLOGIA SENAC PELOTAS
Nome do aluno: Davi Beskow Venzke
Identificação da Turma: ADS III semestre Noite
Data:13/05/2010
1 Bouncing Circle
1.1 Introdução e Funcionamento
A propriedade Bouncing Circle é uma animação de um círculo que percorre uma area
cujo valor e representado por getbounds() método que retorna o tamanho da janela, a
classe tem propriedades grafícas que podem ser definidas pelo programador como
tamanho do círculo, trajetória e cor, o seu funcionamento se dá através de cálculos
matemáticos de incremento e decremento das variaveis para que ocorra o movimento
dentro da area da janela.
1.2 Código da aplicação
/*
* Copyright (c) 2000 David Flanagan. All rights reserved.
* This code is from the book Java Examples in a Nutshell, 2nd Edition.
* It is provided AS-IS, WITHOUT ANY WARRANTY either expressed or implied.
* You may study, use, and modify it for any non-commercial purpose.
* You may distribute it non-commercially as long as you retain this notice.
* For a commercial use license, or to purchase the book (recommended),
* visit http://www.davidflanagan.com/javaexamples2.
*/
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
/** An applet that displays a simple animation */
public class BouncingCircle extends Applet implements Runnable {
int x = 150, y = 100, r = 100; // Position and radius of the circle
int dx = 11, dy = 7; // Trajectory of circle
Thread animator; // The thread that performs the animation
volatile boolean pleaseStop; // A flag to ask the thread to stop
/** This method simply draws the circle at its current position */
public void paint(Graphics g) {
g.setColor(Color.red);
g.fillOval(x - r, y - r, r * 2, r * 2);
}
/**
* This method moves (and bounces) the circle and then requests a redraw.
* The animator thread calls this method periodically.
*/
public void animate() {
// Bounce if we've hit an edge.
Rectangle bounds = getBounds();
if ((x - r + dx < 0) || (x + r + dx > bounds.width))
dx = -dx;
if ((y - r + dy < 0) || (y + r + dy > bounds.height))
dy = -dy;
// Move the circle.
x += dx;
y += dy;
// Ask the browser to call our paint() method to draw the circle
// at its new position.
repaint();
}
/**
* This method is from the Runnable interface. It is the body of the thread
* that performs the animation. The thread itself is created and started in
* the start() method.
*/
public void run() {
while (!pleaseStop) { // Loop until we're asked to stop
animate(); // Update and request redraw
try {
Thread.sleep(100);
} // Wait 100 milliseconds
catch (InterruptedException e) {
} // Ignore interruptions
}
}
/** Start animating when the browser starts the applet */
public void start() {
animator = new Thread(this); // Create a thread
pleaseStop = false; // Don't ask it to stop now
animator.start(); // Start the thread.
// The thread that called start now returns to its caller.
// Meanwhile, the new animator thread has called the run() method
}
/** Stop animating when the browser stops the applet */
public void stop() {
// Set the flag that causes the run() method to end
pleaseStop = true;
}
}
1.3 Propriedades utilizadas
classes importadas Applet, Color, Graphics, Rectangle.
A classe BouncingCircle é uma classe extendida da Classe Applet.
int x = 60, y = 60, r = 60; // / Posição e raio do círculo
int dx = 10, dy = 10; // Trajetória do círculo
Thread animator; // thread que executa a animação é usado para melhorar a execução
da applet e mante-lo funcionando até o fechamento do programa.
volatile boolean pleaseStop; // Um sinalizador de pedir para parar a thread
O volatile serve para manter o pleseStop visivel a todas as threads
//Este método simplesmente chama o círculo em sua posição atual
public void paint(Graphics g) {
//seta a cor vermelha
g.setColor(Color.red);
g.fillOval(x - r, y - r, r * 2, r * 2);
}
/*
* Este método move (em saltos) o círculo e então pede um redesenho.
* animate() é chamado periodicamente.
*/
public void animate() {
// verifica quando o círculo bate no borda.
Rectangle bounds = getBounds();// recebe volores do metodo getbounds da classe
component
if ((x - r + dx < 0) || (x + r + dx > bounds.width))
dx = -dx; //decrementa a variável
if ((y - r + dy < 0) || (y + r + dy > bounds.height))
dy = -dy; //decrementa a variável
// Move o circulo
x += dx; //incrimento
y += dy; //incrimento
// método repaint () para desenhar o círculo
// Na sua nova posição.
repaint();
}
/**
* Este método é a partir da interface Runnable.
* Que realiza a animação
*/
public void run() {
while (!pleaseStop) { // Loop até fecharmos a janela
animate(); // solicita redesenho
try {
Thread.sleep(100);
} // espera 100 milliseconds
catch (InterruptedException e) {
}
}
}
// começa a animação
public void start() {
animator = new Thread(this); // Cria a thread
pleaseStop = false; // Seta pleaseStop para false
animator.start(); // Inicia a thread.
}
// Para a animação quando é fechada a janela
public void stop() {
// Seta a variavel pleaseStop para que pare o metodo run()
pleaseStop = true;
}
}
1.4 Visualização da Ferramenta em Funcionamento
1.5 Conclusão
Durante o estudo da aplicação Bouncing Circle notei a simplicidade do código com o
uso do extends que além de otimizar, melhora a visualização do código e facilita o seu
entendimento, o uso da instrução Thread, que melhora o desenpenho da aplicação bem
como o uso de seu metodo sleep(), que permite gerar uma pausas.
Download