IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

[Swing] Méthode paint qui ne se lance pas


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [Swing] Méthode paint qui ne se lance pas
    Bonjour à tous, je suis en train de développer un petit jeu en 2D isométrique, et je suis en train de rencontrer un bug que je n'avais pas avant, suite à une refonte de l'architecture de mes classes.

    Je dispose d'une classe Map, qui se stocke des cubes. En UML on a un peu ça :

    ---------------
    | JComponent |
    ----------------
    ^
    |
    --------
    | Cube |
    --------
    ^
    |
    ------------- -------
    | GameCube | <--------| Map |
    ------------- -------

    Ma classe Map, dispose d'une méthode Load() qui charge un fichier XML en mémoire, puis une classe Draw() qui se charge de dessiner ceci.

    Voici le code :

    Extrait de la boucle Draw() de la classe Map
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    for (ArrayList<GameCube> cubeList: arrayList) {
    					int decalagePlanLigne = 1;
    					int k = 0;
    					for (GameCube cube: cubeList) {
    						Point point = new Point(x += (Configuration.CUBEWIDTH / 2), y -= (Configuration.CUBEHEIGHT / 4) - 2, 0);
    						cube.setPoint(point);
    						cube.setMatX(j);
    						cube.setMatY(k);
    						cube.addMouseMotionListener(this);
    						cube.addMouseListener(this);
    						cube.Draw();
    						//this.add(this.cubeTab.get(i).get(j).get(k), new Integer(plan - decalagePlanLigne + 1), decalagePlanLigne + 1);
    						this.add(cube, new Integer(plan - decalagePlanLigne + 1), decalagePlanLigne + 1);
     
    						decalagePlanLigne++;
     
    						k++;
    					}
    Extrait de la classe GameCube dont la méthode paintComponent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    public GameCube(int idDB, String type, BufferedImage image, boolean accessible, boolean stackable, int id) {
    		super(idDB, type, image, accessible, stackable);
    		this.id = id;
    		this.setSize(new Dimension(image.getWidth(), image.getHeight()));
     
    		this.addMouseListener(this);
    	}
     
    	public GameCube(Point point) {
    		super();
    		this.point = point;
    	}
     
    	public void Draw() {
    		if (this.point != null) {
    			this.setLocation(this.getX(), this.getY());
    			this.setVisible(true);
    		}
    	}
     
    	/* (non-Javadoc)
    	 * @see javax.swing.JComponent#paintComponent(java.awt.Graphics)
    	 */
    	@Override
    	protected void paintComponent(Graphics g) {
    		g.drawImage(super.getImage(), 0, 0, this);
     
    		if (mouseEntered) {
    			// On redéfinit une couleur pour notre rond
    			float alpha = 0.30f;
    //			 int type = AlphaComposite.SRC_OVER;
    //			 AlphaComposite composite = AlphaComposite.getInstance(type, alpha);
    			g.setColor(new Color(1, 0, 0, alpha));
     
    			// On le dessine aux coordonnées souhaitées
    			g.fillPolygon(xpoints, ypoints, npoints);
    		}
    	}
    Actuellement on force le paint avec le setLocation, mais j'ai tenté de le faire avec un repaint(); et cela ne marche pas plus. Je ne comprends pas. Il ne s'appelle que lors d'un paint(getGraphics()).

    Voila, merci à tous, s'il vous faut plus de détails n'hesitez pas !

    Bonne soirée.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Ah, je suis désolé d'avoir posté ce message, je désespérait après 8 heures dessus, mais je viens miraculeusement de trouver la solution.

    J'avais surchargé la méthode getWidth() de la classe Map (qui hérite de JLayeredPane).

    Donc voila, problème résolu ! Le poste est en delestage, je crois que c'est ce qu'il faut faire.

Discussions similaires

  1. Serveur Xorg sur debian testing qui ne se lance pas
    Par Cyrius dans le forum Applications et environnements graphiques
    Réponses: 7
    Dernier message: 02/01/2006, 00h25
  2. Tâche qui ne se lance pas avec cron
    Par bugalood dans le forum Administration système
    Réponses: 3
    Dernier message: 17/10/2005, 19h13
  3. Réponses: 3
    Dernier message: 16/09/2005, 11h01
  4. mmc.exe qui ne se lance pas
    Par r0d dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 27/04/2005, 18h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo