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 :

Colorier des cases d'une JTable à partir de tableaux d'entier


Sujet :

Composants Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Colorier des cases d'une JTable à partir de tableaux d'entier
    Bonjour à tous,
    Je rencontre des difficultés pour colorier certaines cases d'une JTable. Avant toute chose je précise que j'ai bien cherché sur le forum et que malgré les aides apportées aux autres membres, je n'ai pas réussi à trouver la solution pour mon application.
    Voici mon soucis :

    Dans un jeu, j'ai un joueur qui a des pièces (un peu comme celles du jeu Tetris) matérialisées par des matrices 5*5 contenant des 1 si la case courante est remplie, des 0 si la case courante n'est pas remplie.
    Par ex, pour faire une pièce longue de 4 carrés, la matrice est la suivante :

    1 1 1 1 0
    0 0 0 0 0
    0 0 0 0 0
    0 0 0 0 0
    0 0 0 0 0

    J'aimerai afficher cette pièce dans une JTable, et colorier les cases de la JTable en fonction des données. Si un 1 est à la case d'indice [i][j] de ma matrice de pièce je colorie la case correspondante dans ma JTable (donc à l'indice [i][j]) en rouge par ex, sinon je laisse en blanc.
    En cherchant sur ce forum et d'autres, j'ai trouvé ce code :

    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
     
    public class MyTableCellRenderer extends DefaultTableCellRenderer {
          int i;
          int j;
     
        public MyTableCellRenderer(int ligne, int colonne) {
            super();
            i = ligne;
            j = colonne;
        }
     
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            Color couleur_fond = new Color(238,238,238);
                    if (row == i || column == j) {
                        setBackground(joueur1.get_couleur_pieces());
                    else 
                        setBackground(couleur_fond);
            return this;
        }
    et ce code est appelé par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tJ1_1.setDefaultRenderer(Object.class, new MyTableCellRenderer(0,0));
    Malheureusement, ce code me permet uniquement de colorier les cases de la première ligne et de la 1ere colonne. Ce code ne colorie pas les cases en fonction des entiers contenus dans ma matrice contenant les informations de la pièce du joueur à afficher. Or vous comprendrez bien que le joueur aura plusieurs pièces différentes et que en fonction de chaque pièce, la méthode doit afficher différents résultats. J'ai essayé différentes choses mais rien de très concluant ...

    J'espère avoir été clair, si ce n'est pas le cas, n'hésitez pas à demander plus d'informations .
    Merci à ceux qui trouveront le temps pour m'aider !

  2. #2
    Membre éprouvé Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Points : 934
    Points
    934
    Par défaut
    Salut !

    inspire toi de ça peut-être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     if ((value != null) && (value.equals("g"))) { 
                cell.setBackground(Color.GREEN);
            }
            else {
                if ((value != null) && (value.equals("r"))) { 
                    cell.setBackground(Color.RED);
                }
                else {
                    cell.setBackground(Color.white);
                }      
            }

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    le probleme c'est que ce code là se lance pour chaque case de mon JTable, or chaque case devra avoir une valeur différente donc la méthode devrait évoluer avec une boucle ou autre non ?
    et celà je n'arrive pas à l'implémenter..

    parceque par ex, le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class MonCellRenderer extends DefaultTableCellRenderer {
     
    	public Component getTableCellRendererComponent(JTable table, Object value,
    			boolean isSelected, boolean hasFocus, int row, int column) {
    		Component cell = super.getTableCellRendererComponent(table, value,
    				isSelected, hasFocus, row, column);
     
    		if (row == 1 && column == 1)
    			cell.setBackground(Color.BLUE);
    		else
    		cell.setBackground(Color.PINK);
    		return cell;
    permet de colorier la case 1,1 mais comment faire par ex si je veux ensuite colorier la case 2,2 ?
    car si je fais une méthode semblable à celle là pour colorier la case 2,2, lorsque je vais l'appeler, la case 2,2 sera bien coloriée mais la case 1,1 redeviendra comme avant ...

    merci à toi

  4. #4
    Membre éprouvé Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Points : 934
    Points
    934
    Par défaut
    comme ça ?

    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
     
    public class couleur extends DefaultTableCellRenderer {
         int [][] uneMatrice = null;
         public void setMatrice(int[][] matrice) {
             uneMatrice = matrice;
         }
         public Component getTableCellRendererComponent
                        (JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column){
            Component cell = super.getTableCellRendererComponent
                        (table,value,isSelected,hasFocus,row,column);       
            if (uneMatrice[row][column] == 1) {
                cell.setBackground(Color.BLUE);
            }
            else {
                    cell.setBackground(Color.white);
                }
            return cell;
        }
    }

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Yess !!
    Exactement ca !
    Merci bcp à toi !

Discussions similaires

  1. colorier des cases dans une matrices
    Par benoit_gyf dans le forum MATLAB
    Réponses: 4
    Dernier message: 02/06/2014, 18h46
  2. Fixer la taille des cases d'une JTable
    Par JTABLE dans le forum Débuter
    Réponses: 4
    Dernier message: 27/06/2011, 15h27
  3. [JTable] coloration des lignes d'une JTable
    Par MathiasM dans le forum Composants
    Réponses: 3
    Dernier message: 22/06/2009, 10h19
  4. {VBA Excel} Colorier des cases selon la valeur dans une autre
    Par Thomas69 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/06/2008, 09h56
  5. Réponses: 2
    Dernier message: 15/06/2005, 17h32

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