bonjour mon fichier se nomme AnimeBall.java
et je n'arrive pas a le faire marcher , je ne l'ai meme pas encore implementer dans une page html. Je n'arrive pas a trouver la solution pouvez vous m'aider svp ?
mon programme simule une balle rouge qui rebondi dans tous les sens et on peu choisir si l'on veut voir son cheminement ou pas.
merci d'avance
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import javax.swing.JApplet;
public class AnimeBall extends JApplet {
Motivator fullMover;
Motivator fadeMover;
public void init() {
getContentPane().add(getContent());
}
public void start() {
fullMover.start();
fadeMover.start();
}
public void stop() {
fullMover.stop();
fadeMover.stop();
}
private JTabbedPane getContent() {
FullTrail fullTrail = new FullTrail();
fullMover = new Motivator(fullTrail);
FadingTrail fader = new FadingTrail();
fadeMover = new Motivator(fader);
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.addTab("full trail", fullTrail);
tabbedPane.addTab("fading trail", fader);
return tabbedPane;
}
}
public class AnimeBall {
Motivator fullMover;
Motivator fadeMover;
private void start() {
fullMover.start();
fadeMover.start();
}
private JTabbedPane getContent() {
FullTrail fullTrail = new FullTrail();
fullMover = new Motivator(fullTrail);
FadingTrail fader = new FadingTrail();
fadeMover = new Motivator(fader);
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.addTab("full trail", fullTrail);
tabbedPane.addTab("fading trail", fader);
return tabbedPane;
}
public static void main(String[] args) {
AnimeBall trails = new AnimeBall();
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(trails.getContent());
f.setSize(400,400);
f.setLocation(200,200);
f.setVisible(true);
trails.start();
}
}
class FullTrail extends JPanel implements Movable {
BufferedImage offscreen;
Point loc;
int dx = 3;
int dy = 2;
final int D = 30;
protected void paintComponent(Graphics g) {
if(offscreen == null) {
initOffscreen();
}
g.drawImage(offscreen, 0, 0, this);
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(Color.red);
g2.fillOval(loc.x-D/2, loc.y-D/2, D, D);
}
public void moveBall() {
updateOffscreen();
checkBoundries();
loc.x += dx;
loc.y += dy;
repaint();
}
private void checkBoundries() {
if(loc.x - D/2 + dx < 0 || loc.x + D/2 + dx > getWidth())
dx *= -1;
if(loc.y - D/2 + dy < 0 || loc.y + D/2 + dy > getHeight())
dy *= -1;
}
private void initOffscreen() {
int w = getWidth();
int h = getHeight();
loc = new Point(w/2, h/2);
offscreen = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = offscreen.createGraphics();
g2.setColor(UIManager.getColor("Panel.background"));
g2.fillRect(0,0,w,h);
g2.dispose();
}
private void updateOffscreen() {
Graphics g = offscreen.getGraphics();
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(new Color(240,200,240));
g2.fillOval(loc.x-2, loc.y-2, 4, 4);
g2.dispose();
}
}
class FadingTrail extends JPanel implements Movable {
Point[] trail;
Point loc;
int dx = 2;
int dy = 3;
final int D = 30;
public FadingTrail() {
int trailLength = 20;
trail = new Point[trailLength];
for(int j = 0; j < trail.length; j++) {
trail[j] = new Point();
}
loc = new Point(200,100);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
Graphics2D copy = (Graphics2D)g.create();
copy.setPaint(new Color(240,200,240));
float alpha = 1f;
float alphaInc = 1f/20.5f;
AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha);
for(int j = 0; j < trail.length; j++) {
copy.setComposite(ac);
copy.fillOval(trail[j].x-2, trail[j].y-2, 4, 4);
alpha -= alphaInc;
ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha);
}
copy.dispose();
g2.setPaint(Color.red);
g2.fillOval(loc.x-D/2, loc.y-D/2, D, D);
}
public void moveBall() {
updateTrail();
checkBoundries();
loc.x += dx;
loc.y += dy;
repaint();
}
private void checkBoundries() {
if(loc.x - D/2 + dx < 0 || loc.x + D/2 + dx > getWidth())
dx *= -1;
if(loc.y - D/2 + dy < 0 || loc.y + D/2 + dy > getHeight())
dy *= -1;
}
private void updateTrail() {
for(int j = trail.length-1; j > 0; j--) {
trail[j].setLocation(trail[j-1].getLocation());
}
double theta = Math.atan2(dy,dx) + Math.PI;
int x = loc.x + (int)((D/2)*Math.cos(theta));
int y = loc.y + (int)((D/2)*Math.sin(theta));
trail[0].setLocation(x, y);
}
}
interface Movable {
public void moveBall();
}
class Motivator implements Runnable {
Movable movable;
Thread thread;
boolean keepMoving;
public Motivator(Movable m) {
movable = m;
}
public void run() {
while(keepMoving) {
try {
Thread.sleep(50);
} catch(InterruptedException e) {
keepMoving = false;
}
movable.moveBall();
}
}
public void start() {
if(!keepMoving) {
keepMoving = true;
thread = new Thread(this);
thread.setPriority(Thread.NORM_PRIORITY);
thread.start();
}
}
public void stop() {
keepMoving = false;
thread.interrupt();
thread = null;
}
}
Partager