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

AWT/Swing Java Discussion :

Aide ou conseils pour afficher une matrice dans une fenêtre en JAVA


Sujet :

AWT/Swing Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Aide ou conseils pour afficher une matrice dans une fenêtre en JAVA
    Bonjour à tous!
    J'espère ne pas m'être trompé de section, et je ne crois pas avoir créer de doublons,
    Si c'est le cas, vraiment navré!

    Dans le cadre d'un projet, je dois remplir une matrice de taille 5x5 aléatoirement avec des 0 et des 1.
    Je dois représenter cette dernière en affichant un carré noir pour chaque 1 sorti et un carré blanc pour chaque 0 sorti.

    J'ai donc commencé par le remplissage de la matrice ainsi que son affichage dans la console

    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
    public class matrice {
     
        int[][] matrice=new int[5][5];
        public int[][] getMatrice() {
            return matrice;
        }
     
        public matrice() {
            int i, j;
            for(i=0; i<matrice.length; i++){
                for(j=0; j<matrice.length ; j++){
                    matrice[i][j]= (int) Math.round(Math.random());
                }
            }
        }
     
       // methode affichage
        public void afficher() {
            int i, j;
            for(i=0; i<matrice.length; i++){
                for(j=0; j<matrice.length ; j++){
                    System.out.print(matrice[i][j]);
                }
                System.out.println("");
            }
        }
    }
    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
    import javafx.application.Application;
    import javafx.stage.Stage;
     
    public class test extends Application{
     
        public static void main(String[] args) {
            matrice carre = new matrice();
            carre.afficher();
        }
     
        @Override
        public void start(Stage primaryStage) throws Exception {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
    }
    Donc jusque là tout va bien, voilà le résultat obtenu:

    Nom : test2.png
Affichages : 2554
Taille : 756 octets

    Le problème, c'est que je n'arrive pas à afficher cette dernière dans une fenêtre, en remplaçant les 0 par des carrés blancs, et les 1 par des carrés noirs

    J'ai suivi des tutoriaux qui m'ont permis de créer ce genre de chose:

    Nom : test.png
Affichages : 3080
Taille : 5,0 Ko

    Le problème c'est que je n'arrive pas à "fusionner" le code de ma matrice avec le code pour sortir l'interface

    Pourriez vous m'aider ou me donner des conseils s'il vous plait?

    Je vous remercie d'avance

    Cordialement

    Aurevoiir

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    D'après l'image que tu montres, il semble que tu cherches à afficher ta matrice avec une JTable. Ce n'est pas le moyen le plus simple. Déjà, ta matrice est un tableau de int, donc il va falloir le convertir en tableau de Integer (ou en Vector de Vector éventuellement). Ensuite, il faudra mettre en place un renderer pour pouvoir afficher des cases de couleurs au lieu des valeurs. A priori, tu as déjà fait ça, puisqu'on voit bien des cellules de couleur. Tu n'as donc plus qu'à copier les données de ta matric dans un tableau de Integer et créer la JTable à partir de ce tableau.

    Déjà, je te conseille d'utiliser des constantes pour le nombre de lignes et de colonnes, ça simplifira bien tout le reste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public static final int NB_COLONNES = 5;
    	public static final int NB_LIGNES = 5;
    Donc tu pourras initialiser ta matrice comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        int[][] matrice=new int[NB_LIGNES][NB_COLONNES];
    Ensuite le code pour afficher la JTable :
    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
    39
    40
    41
    42
    43
    44
    45
    46
     
    public static void main(String[] args) {
       JFrame frame=new JFrame("Matrice");
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
       matrice matrice = new matrice();
     
       // conversion tableau int[][] en Integer[][]	
       Integer[][] data = new Integer[NB_LIGNES][NB_COLONNES];
       for(int i=0; i<NB_LIGNES; i++) {
          for(int j=0; j<NB_COLONNES; j++) {
              data[i][j]=matrice.getMatrice()[i][j];
          }
       }
     
       // titres
       String[] colonnes = new String[NB_COLONNES];
       for(int i=0; i<NB_COLONNES; i++) {
          colonnes[i]=String.valueOf(i+1);
       }
     
       // création de la table
       JTable table = new JTable(data, colonnes);
     
       // par défaut, si on ne fait pas de modèle spécifique pour la JTable, tout est typé Object
       // donc on met un renderer pour la classe Object
       table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
           @Override
           protected void setValue(Object value) {
               if ( value.equals(0) ) {
                   setBackground(Color.WHITE);
    	   }
               else {
                   setBackground(Color.BLACK);
               }
               super.setValue(null); // comme on ne veut pas afficher le nombre, on le remplace par null (qui sera affiché par une chaîne vide par la JTable)
           }
       });
     
       frame.add(table);
     
       frame.setSize(400, 400);
       frame.setLocationRelativeTo(null);
       frame.setVisible(true);
     
    }
    Mais il est plus simple d'utiliser un JPanle avec un GridLayout :


    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
    public static void main(String[] args) {
        JFrame frame=new JFrame("Matrice");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
        matrice matrice = new matrice();
     
        JPanel panel = new JPanel(new GridLayout(0,NB_COLONNES)); // on n'a pas besoin de mettre le nombre de lignes si on donne un nombre de colonnes
     
        for( int i=0; i<NB_LIGNES; i++) {
            for( int j=0; j<NB_COLONNES; j++) {
                int valeur = matrice.getMatrice()[i][j];
    	    JPanel cellule = new JPanel(); // on utilise un simple JPanel pour chaque cellule, donc on adaptera la couleur de fond (background)
                cellule.setPreferredSize(new Dimension(32,32)); // donne une taille de 32x32 pixels par défaut
    	    if ( valeur==0 ) {
    	        cellule.setBackground(Color.WHITE);
                }
                else {
                    cellule.setBackground(Color.BLACK);
                }
                panel.add(cellule);
           }
        }
     
        frame.add(panel);
     
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Wow un big big merci à toi!
    J'en attendais pas autant, c'est vraiment super de m'avoir donné les deux versions! Je peux les comparer l'une à l'autre et en effet ça a l'air bien plus simple avec la deuxieme solution!
    Je note ce post comme résolu, vraiment un big merci!

    Cordialement

    Aurevoiir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Afficher des messages dans une RichTextBox dans une FORM
    Par Poulki dans le forum C#
    Réponses: 1
    Dernier message: 12/05/2015, 10h19
  2. Remplacement d'une ligne par une autre dans une matrice
    Par Mathematiker dans le forum Scilab
    Réponses: 4
    Dernier message: 17/02/2015, 14h57
  3. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  4. afficher la matrice d'une image dans une figure
    Par kawther dans le forum Interfaces Graphiques
    Réponses: 15
    Dernier message: 04/12/2008, 15h20
  5. Afficher les valeurs d'une structure dans une matrice
    Par yabbiyou dans le forum MATLAB
    Réponses: 1
    Dernier message: 22/02/2007, 12h26

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