Cherche desesperement comment bougez dans Frame

Signaler
Messages postés
6
Date d'inscription
mardi 9 juin 2009
Statut
Membre
Dernière intervention
15 juin 2009
-
sheorogath
Messages postés
2465
Date d'inscription
samedi 21 février 2004
Statut
Modérateur
Dernière intervention
29 janvier 2010
-
Bonjour et désolé d'encombrer les forum avec des question toujours si conne mais je suis en fin de projet et je ne sais plus vers qui me tourné. En effet il me manque à savoir comment peut on bougez avec la methode move() dans Frame.

Tout d'abord dans mon application il existe 6 principal class:
Rectangle -- permet de dessiner un rectangle extends shape
Ellipse -- permet de dessiner un ellipse extends shape
Disque -- objet disque extends shape
Poteau -- objet poteau avec vector de disque extends shape
Drawing -- Frame
Shape -- est la classe de base qui représente une forme géométrique.
les class rectangle, Ellipse et Shape ont été ecrit en cours mais je crois bien qu'il y a une faute dans move().
Dans ma fenetre Drawing je dessine apartir d'un vector shape, jusqu'a la tout va bien, j'arrive à initialiser les propriétes des poteau et des disques, or de que je decide de bougez par la class move (), le compilateur m'affiche le message d'erreur suivant :
Exception in thread "main" java.lang.NullPointerException
 at Drawing.move(Drawing.java:132) // j mis un commentaire sur cette erreur dans la procedure move() (tout en bas)
  at java.awt.Component.setLocation(Component.java:1970)
  at java.awt.Window.init(Window.java:398)
  at java.awt.Window.(Window.java:432)
  at java.awt.Frame.(Frame.java:403)
  at java.awt.Frame.(Frame.java:368)
  at Drawing.(Drawing.java:34)
  at Drawing.main(Drawing.java:139)
je sais bien que cette erreur Thread sur main est trés grave, mais je n'arrive pas à resoudre ce probleme.
voici mon code de la class Drawing:
public class Drawing extends Frame{
// -- Global constants ------------------------------------------------
private static String WND_TITLE = "Drawing";
private static int WND_WIDTH = 900;
private static int WND_HEIGHT = 500;
private static int tableaux[][];
private static int nbDisques =0;
private static Vector <Disque> vecA = new Vector();
private static Vector vecPot = new Vector();
private static char potDepart;
private static char potArrivee;
private static char again;
// -- Global variables -----------------------------------------------
private Vector<Shape> shapeVector = new Vector<Shape>();
private final int deltaX =10;
private final int deltaY = 10;
private int hauteur =150;
private final int nbMaxDisques = 5;
private Vector <Disque> vecB = new Vector();
private Vector <Disque> vecC = new Vector();
// Constructor
public Drawing()
{
// Initialise the frame
this.setTitle(WND_TITLE);
this.setSize(WND_WIDTH, WND_HEIGHT);
this.setVisible(true);
this.toFront();
this.setLocationRelativeTo(null);
}
/*******************************************************************
* Create the robot
*******************************************************************/
public void create(Vector v)
{
int noPoteau = 3;
int table[][] = new int[noPoteau][nbMaxDisques+1];
int posX1; // poteau A
int posX2; // poteau B
int posX3; // poteau C
int posY;
int largeurBase = 175;
int largeur;
Point point = new Point();
posX1 = WND_WIDTH/4;
posX2 = WND_WIDTH/2;
posX3 = 3 *WND_WIDTH/4;
posY = 3*WND_HEIGHT/4;
v.get(0).setCentreX(posX1); // set x Poteau A
v.get(1).setCentreX(posX2); // set x Poteau B
v.get(2).setCentreX(posX3); // set x Poteau C
v.get(0).setCentreY(posY); // set y Poteau A
v.get(1).setCentreY(posY); // set y Poteau B
v.get(2).setCentreY(posY); // set y Poteau C

Color niceBlue = new Color(204, 204, 255);
Color niceColor = new Color(130, 130, 255);
//Base poteau A
this.shapeVector.add(new Rectangle(new Point(posX1- (largeurBase/2), posY), largeurBase , deltaY,
Color. BLUE, niceColor));
// hauteur A
this.shapeVector.add(new Rectangle(new Point(posX1- deltaY/2, posY-hauteur), deltaY , hauteur,
Color. BLUE, niceBlue));
this.shapeVector.add(new Rectangle(new Point(posX2- (largeurBase/2), posY), largeurBase , deltaY,
Color. BLUE, niceColor));
this.shapeVector.add(new Rectangle(new Point(posX2-deltaY/2, posY-hauteur), deltaY , hauteur,
Color. BLUE, niceBlue));
this.shapeVector.add(new Rectangle(new Point(posX3- (largeurBase/2), posY), largeurBase , deltaY,
Color. BLUE, niceColor));
this.shapeVector.add(new Rectangle(new Point(posX3 -deltaY/2, posY-hauteur), deltaY , hauteur,
Color. BLUE, niceBlue));
int largeurDisque = 0;
int posYDisque = 0;
for (int i = 1; i < nbDisques+1; i++){
    largeurDisque = 2*i*deltaX;
    posYDisque = (posY - ((nbDisques-i)+1)*deltaY);
    this.shapeVector.add(new Rectangle(new Point(posX1-(largeurDisque/2), posYDisque), largeurDisque , deltaY,
    Color. BLUE, niceBlue));
}
repaint();
}
public Vector CreePoteaux(Vector <Disque> v){
        Vector Ptx = new Vector();
        Poteau A = new Poteau(v);
        Ptx.add(0, A);
        Poteau B = new Poteau(vecB);
        Ptx.add(1, B);
        Poteau C = new Poteau(vecC);
        Ptx.add(2, C);
        return Ptx;
        }
public Vector <Disque> Disque(){
            Vector <Disque> DisqueP = new Vector();
            for (int i = 0; i<nbDisques; i++ ){
                Disque nDisque = new Disque(i);
                DisqueP.add(i, nDisque);
           }
return DisqueP;}
private Point coinHautGauche(Poteau p, int hauteur, int largeur){
    Point point = new Point();
    point.x = p.getCentreX() - deltaX*largeur;
    point.y = p.getCentreY() - 2*deltaY*hauteur;
    return point;
}
/*******************************************************************
* Paints the graphics
*******************************************************************/
public void paint(Graphics g)
{
for(int i = 0; i < this.shapeVector.size(); i++)
{
shapeVector.get(i).draw(g);
g.setFont(new Font("Serif", Font.PLAIN, 20));
g.drawString("A",WND_WIDTH/4, 4*WND_HEIGHT/5);
g.drawString("B",WND_WIDTH/2, 4*WND_HEIGHT/5);
g.drawString("C",3*WND_WIDTH/4, 4*WND_HEIGHT/5);
}
}
        public void move(int x,int y)
         {
            for(int i = 0; i < this.shapeVector.size() ; i++)  // l'endroit où le compilateur signal l'erreur
            {
                shapeVector.get(i).move(x, y);
            }
             repaint();
    }
public static void main (String[] args){
    Drawing d = new Drawing();
    do{
        System.out.println("Entrez le nombre de disques :");
        nbDisques = Input.readInt();
        vecA = d.Disque();
        vecPot = d.CreePoteaux(vecA);
        d.create(vecPot);
        System.out.println("Entrez le poteau de départ:");
        potDepart = Input.readChar();
        System.out.println("Entrez le poteau de départ:");
        potArrivee = Input.readChar();
        switch(potArrivee){
            case 'B' : d.move(vecPot.get(1).getCentreX(), vecPot.get(1).getCentreY());
        }
        System.out.println("Voulez vous recommencer:(y pour continuer)");
        potArrivee = Input.readChar();
    }while (again == 'y');
  /*  System.out.println("Entrez le poteau de départ:");
    potDepart = Input.readChar();
    System.out.println("Entrez le poteau de départ:");
    potArrivee = Input.readChar();    if (potDepart 'A'&& potArrivee 'B'){
        d.move(vecPot.get(1).getCentreX(), vecPot.get(1).getCentreY());
    }*/
}
}

dans Shape j une mehode equalement move() qui se ecrit de la maniere suivante :
public void move(int x, int y)
{
         p1.x+=x;
         p1.y+=y;

         p2.x+=x;
         p2.y+=y;
}

Shape a comme proprièté que de 2 point et 2 color.
 
si quelqu'un peut m'aider le plus vite possible ca serais tres TRES sympa.

1 réponse

Messages postés
2465
Date d'inscription
samedi 21 février 2004
Statut
Modérateur
Dernière intervention
29 janvier 2010
11
p1 ou p2 est null


"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"