Ajouter un commentaire

Niroken
Reverso

Hello,

Je propose une deuxieme version de mon code pour manipuler des tableuax de boutons ainsi que leurs images associées.

Code de la fenetre :

package graphic;

import graphic.component.ReversoPion;

import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.JFrame;

import commun.CouleurReversoPion;

public class ReversoFrame extends JFrame {

    private static final long serialVersionUID = 1L;
    
    private static final int mReversoGridHeight = 10;
    private static final int mReversoGridWidth = 10;
    
    public ReversoFrame() {
        setLayout(new GridLayout(mReversoGridHeight ,mReversoGridWidth));
        setSize(new Dimension(200, 200));
        setTitle("Reverso");
        
        ReversoPion[][] vReversoPions = new ReversoPion[mReversoGridHeight][mReversoGridWidth];
        
        // Creation de chaque bouton
        for (int i = 0; i < mReversoGridHeight; i++) {
            for (int j = 0 ; j < mReversoGridWidth; j++) {
                vReversoPions[i][j] = new ReversoPion(CouleurReversoPion.clair);
                add(vReversoPions[i][j]);
            }
        }
        
        // Pour chaque bouton cree, on ajoute ses voisins
        for (int i = 0; i < mReversoGridHeight; i++) {
            for (int j = 0 ; j < mReversoGridWidth; j++) {
                if (isReversoPionVoisin(i - 1, j)) {
                    vReversoPions[i][j].addReversoPionVoisin(vReversoPions[i - 1][j]);
                }
                
                if (isReversoPionVoisin(i + 1, j)) {
                    vReversoPions[i][j].addReversoPionVoisin(vReversoPions[i + 1][j]);
                }
                
                if (isReversoPionVoisin(i, j - 1)) {
                    vReversoPions[i][j].addReversoPionVoisin(vReversoPions[i][j - 1]);
                }
                
                if (isReversoPionVoisin(i, j + 1)) {
                    vReversoPions[i][j].addReversoPionVoisin(vReversoPions[i][j + 1]);
                }
            }
        }
               
        setVisible(true);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }
    
    private static boolean isReversoPionVoisin(int i , int j) {
        if (i >= 0 && j >= 0 && i < mReversoGridHeight && j < mReversoGridWidth) {
            return true;
        } else {
            return false;
        }
    }   

}

Code des boutons qui héritent de la classe JButton

package graphic.component;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JButton;

import commun.CouleurReversoPion;

public class ReversoPion extends JButton {

    private static final long serialVersionUID = 1L;
    
    private static ImageIcon sImageIconPionClair;
    private static ImageIcon sImageIconPionFonce;
    
    static {
        sImageIconPionClair = new ImageIcon("b1.gif");
        sImageIconPionFonce = new ImageIcon("b2.gif");
    }
    
    private List<ReversoPion> mReversoPionsVoisins;
    private CouleurReversoPion mCouleurReversoPion;
    
    public ReversoPion(CouleurReversoPion pCouleurReversoPion) {
        mCouleurReversoPion = pCouleurReversoPion;
        
        if (mCouleurReversoPion == CouleurReversoPion.clair) {
            setIcon(sImageIconPionClair);
        } else if (mCouleurReversoPion == CouleurReversoPion.fonce) {
            setIcon(sImageIconPionFonce);
        }
        
        setPreferredSize(new Dimension(20, 20));
        addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent pE) {
                changeReversoPionCouleur();
                changeReversoPionsVoisinsCouleur();
            }
            
        });
        
        mReversoPionsVoisins = new ArrayList<ReversoPion>();
    }
    
    public void changeReversoPionCouleur() {
        if (mCouleurReversoPion == CouleurReversoPion.clair) {
            mCouleurReversoPion = CouleurReversoPion.fonce;
            setIcon(sImageIconPionFonce);
        } else if (mCouleurReversoPion == CouleurReversoPion.fonce) {
            mCouleurReversoPion = CouleurReversoPion.clair;
            setIcon(sImageIconPionClair);
        }
    }
    
    public void changeReversoPionsVoisinsCouleur() {
        for (ReversoPion vReversoPionTmp : mReversoPionsVoisins) {
            vReversoPionTmp.changeReversoPionCouleur();
        }
    }
    
    public void addReversoPionVoisin(ReversoPion pReversoPionVoisin) {
        if (mReversoPionsVoisins != null) {
            mReversoPionsVoisins.add(pReversoPionVoisin);
        }
    }   

}

Une petite enum sans quoi rien ne marche :D

package commun;

public enum CouleurReversoPion {
    clair, fonce
}

On lance la merveille

import graphic.ReversoFrame;


public class Program {

    public static void main(String[] args) {
        new ReversoFrame();
    }

}

Pour que ca compile, il est important de placer les classes dans les bons packages, ou alors vous les supprimez.

Bonne chance,
Niroken

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 W     W  RRRR   III  H  H  RRRR  
W W R R I H H R R
W W W RRRR I HHHH RRRR
W W W R R I H H R R
W W R RR III H H R RR