A priori le code n'est pas correct dans la classe panneau et dans la méthode go. Essaye ce code qui marche :
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Testjframe15 {
public static void main(String[] args){
Testjframe1 fen = new Testjframe1();
}
}
public class Panneau extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
private int posX = -50;
private int posY = -50;
public void paintComponent(Graphics g) {
// On décide d'une couleur de fond pour notre rectangle
g.setColor(Color.white);
// On dessine celui-ci afin qu'il prenne tout la surface
g.fillRect(0, 0, this.getWidth(), this.getHeight());
// On redéfinit une couleur pour notre rond
g.setColor(Color.red);
// On le dessine aux coordonnées souhaitées
g.fillOval(posX, posY, 50, 50);
}
public int getPosX() {
return posX;
}
public void setPosX(int posX) {
this.posX = posX;
}
public int getPosY() {
return posY;
}
public void setPosY(int posY) {
this.posY = posY;
}
}
public class Testjframe1 extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private Panneau pan = new Panneau();
;
private JPanel container = new JPanel();
private boolean animated = true;
private boolean backX, backY;
private int x, y;
public Testjframe1(){
this.setTitle("Animation");
this.setSize(300, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
container.setBackground(Color.white);
container.setLayout(new BorderLayout());
container.add(pan, BorderLayout.CENTER);
this.setContentPane(container);
this.setVisible(true);
go();
}
private void go() {
// Les coordonnées de départ de notre rond
int x = pan.getPosX(), y = pan.getPosY();
// Le booléen pour savoir si l'on recule ou non sur l'axe x
boolean backX = false;
// Le booléen pour savoir si l'on recule ou non sur l'axe y
boolean backY = false;
// Dans cet exemple, j'utilise une boucle while
// Vous verrez qu'elle fonctionne très bien
while (true) {
// Si la coordonnée x est inférieure à 1, on avance
if (x < 1)
backX = false;
// Si la coordonnée x est supérieure à la taille du Panneau moins la taille du rond, on recule
if (x > pan.getWidth() - 50)
backX = true;
// Idem pour l'axe y
if (y < 1)
backY = false;
if (y > pan.getHeight() - 50)
backY = true;
// Si on avance, on incrémente la coordonnée
// backX est un booléen, donc !backX revient à écrire
// if (backX == false)
if (!backX)
pan.setPosX(++x);
// Sinon, on décrémente
else
pan.setPosX(--x);
// Idem pour l'axe Y
if (!backY)
pan.setPosY(++y);
else
pan.setPosY(--y);
// On redessine notre Panneau
pan.repaint();
// Comme on dit : la pause s'impose ! Ici, trois millièmes de seconde
try {
Thread.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Dans ma classe Panneau j'ai créé une méthode getX() qui existait déjà dans le JPanel. J'ai corrigé le nom de la fonction en getPosX(). J'ai fais la même opération pour getY().
La persévérance est ma vertu.
Aide sur le cours des animation Java
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
La persévérance est ma vertu.
La persévérance est ma vertu.