Probleme Paint

Signaler
Messages postés
1
Date d'inscription
dimanche 14 mars 2010
Statut
Membre
Dernière intervention
25 mars 2010
-
Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
-
bonjour,
j'ai un petit problème :
j'ai ce code source d'une methode paint du jeu de dame:

public void paint(Graphics g)
{
dame = new int[10][10];
g.drawImage(cadre,10, 2,this);

/***** Création des cases *****/
for(int i=1; i<=10; i++)
{
for (int j = 1; j <= 10; j = j + 2)
{
if ((i%2)!= 0)
{
g.drawImage(noir,k * i, k * j,this);
dame[i-1][j-1] = 0;
g.drawImage(blanc,k * i, k * (j + 1), this);
dame[i-1][j] = 5;
}
else
{
g.drawImage(blanc, k * i, k * j, this);
dame[i-1][j-1] = 5;
g.drawImage(noir,k * i, k * (j + 1), this);
dame[i-1][j] = 0;
}
}
}
/***** Création des pions *****/
int j = 50;
for(int i=0; i<10; i++)
{
if ( (i % 2) == 0)
{
g.drawImage(pionNoir, j, 100, this);
dame[i][1] = 2;
g.drawImage(pionNoir, j, 200, this);
dame[i][3] = 2;
g.drawImage(pionBlanc, j, 400, this);
dame[i][7] = 1;
g.drawImage(pionBlanc, j, 500, this);
dame[i][9] = 1;
}
else
{
g.drawImage(pionNoir, j, 50, this);
dame[i][0] = 2;
g.drawImage(pionNoir, j, 150, this);
dame[i][2] = 2;
g.drawImage(pionBlanc, j, 350, this);
dame[i][6] = 1;
g.drawImage(pionBlanc, j, 450, this);
dame[i][8] = 1;
}
j = j+50;
}
g.drawImage(pionBlancSelect,-50,-50,this);
g.drawImage(pionNoirSelect,-50,-50,this);
g.drawImage(dameBlanc,-50,-50,this);
g.drawImage(dameNoir,-50,-50,this);
g.drawImage(dameBlancSelect,-50,-50,this);
g.drawImage(dameNoirSelect,-50,-50,this);
System.out.println("accepté");
}

l'orseque j'execute le programme il me affiche interface graphique un affichage comme suit:

accepté
accepté
accepté
accepté
accepté
accepté
accepté

comment faire pour que la methode paint s'execute une seulle fois;
et merci d'avance..

1 réponse

Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
10
Chez moi, "accepté" apparaît deux fois: je dirais une fois pour faire visible et une fois pour le layout. Il faut comprendre que le système de dessin a en principe le droit d'appeler le code de dessin autant de fois qu'il le juge utile.

import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
public class GameDemo extends JFrame {
    public GameDemo() {
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(630, 630);
        setLocationRelativeTo(null);
        add(new MyGame());
    }
    public static void main(final String args[]) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                new GameDemo().setVisible(true);
            }
        });
    }
}
class MyGame extends JPanel {
    private int[][] dame;
    private Image cadre, noir, blanc, pionNoir, pionBlanc, pionNoirSelect,
            pionBlancSelect, dameNoirSelect, dameBlancSelect, dameNoir, dameBlanc;
    private int k = 50;
    public MyGame() {
        initImages();
    }
    @Override
    protected void paintComponent(final Graphics g) {
        super.paintComponent(g);
        dame = new int[10][10];
        g.drawImage(cadre, 10, 2, this);
        /***** Création des cases *****/
        for (int i = 1; i <= 10; i++) {
            for (int j = 1; j <= 10; j = j + 2) {
                if ((i % 2) != 0) {
                    g.drawImage(noir, k * i, k * j, this);
                    dame[i - 1][j - 1] = 0;
                    g.drawImage(blanc, k * i, k * (j + 1), this);
                    dame[i - 1][j] = 5;
                } else {
                    g.drawImage(blanc, k * i, k * j, this);
                    dame[i - 1][j - 1] = 5;
                    g.drawImage(noir, k * i, k * (j + 1), this);
                    dame[i - 1][j] = 0;
                }
            }
        }
        /***** Création des pions *****/
        int j = 50;
        for (int i = 0; i < 10; i++) {
            if ((i % 2) == 0) {
                g.drawImage(pionNoir, j, 100, this);
                dame[i][1] = 2;
                g.drawImage(pionNoir, j, 200, this);
                dame[i][3] = 2;
                g.drawImage(pionBlanc, j, 400, this);
                dame[i][7] = 1;
                g.drawImage(pionBlanc, j, 500, this);
                dame[i][9] = 1;
            } else {
                g.drawImage(pionNoir, j, 50, this);
                dame[i][0] = 2;
                g.drawImage(pionNoir, j, 150, this);
                dame[i][2] = 2;
                g.drawImage(pionBlanc, j, 350, this);
                dame[i][6] = 1;
                g.drawImage(pionBlanc, j, 450, this);
                dame[i][8] = 1;
            }
            j = j + 50;
        }
        g.drawImage(pionBlancSelect, -50, -50, this);
        g.drawImage(pionNoirSelect, -50, -50, this);
        g.drawImage(dameBlanc, -50, -50, this);
        g.drawImage(dameNoir, -50, -50, this);
        g.drawImage(dameBlancSelect, -50, -50, this);
        g.drawImage(dameNoirSelect, -50, -50, this);
        System.out.println("accepté");
    }
    private void initImages() {
        int w1 = 50;
        int h1 = 50;
        int w2 = 30;
        int h2 = 30;
        cadre = new BufferedImage(581, 581, BufferedImage.TYPE_INT_ARGB);
        Graphics g = cadre.getGraphics();
        g.setColor(Color.BLACK);
        g.drawRect(0, 0, 580, 580);
        noir = new BufferedImage(w1, h1, BufferedImage.TYPE_INT_ARGB);
        g = noir.getGraphics();
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, w1, h1);
        blanc = new BufferedImage(w1, h1, BufferedImage.TYPE_INT_ARGB);
        g = blanc.getGraphics();
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, w1, h1);
        pionBlanc = new BufferedImage(w2, h2, BufferedImage.TYPE_INT_ARGB);
        g = pionBlanc.getGraphics();
        g.setColor(Color.YELLOW);
        g.fillOval(0, 0, w2, h2);
        pionNoir = new BufferedImage(w2, h2, BufferedImage.TYPE_INT_ARGB);
        g = pionNoir.getGraphics();
        g.setColor(Color.GRAY);
        g.fillOval(0, 0, w2, h2);
        pionBlancSelect = new BufferedImage(w2, h2, BufferedImage.TYPE_INT_ARGB);
        g = pionBlancSelect.getGraphics();
        g.setColor(Color.YELLOW);
        g.fillOval(0, 0, w2, h2);
        pionNoirSelect = new BufferedImage(w2, h2, BufferedImage.TYPE_INT_ARGB);
        g = pionNoirSelect.getGraphics();
        g.setColor(Color.GRAY);
        g.fillOval(0, 0, w2, h2);
        dameBlanc = new BufferedImage(w2, h2, BufferedImage.TYPE_INT_ARGB);
        g = dameBlanc.getGraphics();
        g.setColor(Color.YELLOW);
        g.fillOval(0, 0, w2, h2);
        dameNoir = new BufferedImage(w2, h2, BufferedImage.TYPE_INT_ARGB);
        g = dameNoir.getGraphics();
        g.setColor(Color.GRAY);
        g.fillOval(0, 0, w2, h2);
        dameBlancSelect = new BufferedImage(w2, h2, BufferedImage.TYPE_INT_ARGB);
        g = dameBlancSelect.getGraphics();
        g.setColor(Color.YELLOW);
        g.fillOval(0, 0, w2, h2);
        dameNoirSelect = new BufferedImage(w2, h2, BufferedImage.TYPE_INT_ARGB);
        g = dameNoirSelect.getGraphics();
        g.setColor(Color.GRAY);
        g.fillOval(0, 0, w2, h2);
    }
}