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 :

Problème affichage JTable


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2021
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2021
    Messages : 41
    Par défaut Problème affichage JTable
    Bonjour !

    Je suis en train de faire une appli pour gérer les membres d'un groupe, et je suis actuellement en train de coder une JTable pour pouvoir afficher la liste des membres présents. J'ai fait ceci (bon, j'ai fait beaucoup d'autres trucs à côté mais ça c'est la partie qui concerne la JTable) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String[] colonnes = Membres.attributs();
    DefaultTableModel model = new DefaultTableModel(colonnes,0);
     
    JTable table = new JTable(model);
     
    table.setBounds(10, 28, 755, 420);
    add(table);
    Le problème, c'est que ça ne s'affiche pas, tout s'affiche bien sauf la JTable (comme visible dans le screen) :
    Nom : screenDevNet.PNG
Affichages : 254
Taille : 13,4 Ko

    Quelqu'un a une idée de la raison pour laquelle la JTable ne s'affiche pas ? Parce que j'ai beau avoir fait comme les tutos que j'ai pu voir, je n'ai rien, alors qu'eux ont au moins le nom des colonnes...

    Je vous mets ma classe complète en pièce jointe si besoin :p

    Merci d'avance pour votre aide !
    Fichiers attachés Fichiers attachés

  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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Salut,

    1. En fait, la table s'affiche, mais comme elle est vide, on ne voit rien.
      Si tu ajoutes ce code juste après la création du modèle (DefaultTableModel model = new DefaultTableModel(colonnes,0);)
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
       
      for(int i=0;i<10; i++) {
          model.addRow(Arrays.stream(colonnes)
                   .map(col-> ThreadLocalRandom.current().nextInt(100)).toArray());
      }
      tu verras 10 lignes avec des nombres aléatoires, comme quoi, lorsqu'il y a des données dans la JTable, on les voit bien.
    2. Une autre façon pour la voir serait de lui donner temporairement une couleur de fond avec table.setBackground(Color.RED);. C'est une astuce que tu peux utiliser à chaque fois que tu ne vois pas un composant, ou qu'il te semble mal positionné ou mal dimensionné, pour voir comment il est réellement.
      En fait, ta JTable est actuellement blanche et ça te donne l'impression qu'elle n'est pas affichée. Lui forcer une autre couleur permet de vérifier qu'elle est bien affichée.
    3. Cela dit, tu pourrais peut-être me dire que tu t'attendais à voir au moins les titres des colonnes (les entêtes). Je vais y venir.
    4. Avant de continuer, je voudrais parler layout. Même si Swing permet de se passer de gestionnaire d'agencement (LayoutManager), il est toujours préférable d'utiliser des gestionnaires de layout plutôt que de placer et dimmensionner les composants par des méthodes du genre setBounds(), setSize() ou setLocation(). En particulier pour les composants spéciaux déjà fournis par Swing comme la JTable (ou JLabel, JTextField, etc). Parce que ces composants sont prévus pour être intégrés automatiquement par rapport à des LayoutManager.
    5. La JTable est un composant un peu particulier. Les entêtes de colonnes sont affichés par un composant particulier, le JTableHeader. Lorsque tu gères toi-même le placement des composants, il va falloir que tu gères toi-même le placement et le dimensionnement du JTableHeader. Et il faudra aussi gérer toi-même la problématique de défilement des lignes si la hauteur que tu as imposée n'est pas suffisante pour toutes les afficher.
      Il est bien plus simple d'utiliser un LayoutManager comme un BorderLayout qui va gérer tout seul l'affichage des entêtes, avec un JScrollPane en plus pour gérer le défilement des lignes.
      En plus, les LayoutManager dans chaque composant de la hiérarchie vont s'assurer que tous les composants, y compris ceux internes à la JTable seront bien affichés, dimensionnés, positionnés, systématiquement. Sans, tu devras tout gérer toi-même et tu verras que tu vas galérer.
      En plus avec des LayoutManager, tu pourras faire une interface qui s'adapte à la taille de la JFrame, par conséquence à la taille de l'écran qui n'est pas forcément la même pour tout le monde.
      De la même manière, de préférence, laisser la taille de police au système, ce qui permet à l'utilisateur de choisir la taille de police qui lui convient, en fonction de la résolution qui lui convient.

      Si tu tiens à conserver ton placement sans LayoutManager (je te le déconseille cependant), tu peux faire :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      table = new JTable(model);
       
      // je mets la table dans un scrollpane pour faire défiler les lignes, et on la verra avec ses headers au dessus
      JScrollPane tablepanel = new JScrollPane(table);
       
      JLabel nomPanneau = new JLabel("Liste des membres");
      nomPanneau.setBounds(343, 10, 88, 14);
      add(nomPanneau);
       
      // et j'ajoute au JPanel courant tablepanel au lieu de table		
      tablepanel.setBounds(10, 28, 755, 420);
      add(tablepanel);
      Tu peux ajouter aussi un table.setFillsViewportHeight(true); qui permet de voir la JTable remplir complètement le JScrollPane (plus exactement son viewport), y compris lorsqu'il n'y a aucune donnée dedans. Tu ne verras alors que les entêtes.
    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
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2021
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2021
    Messages : 41
    Par défaut
    Merci énormément, en mettant la table dans un JScrollPane elle affiche bien !

    Par contre, pour les LayoutManager, j'en ai essayé quelques uns (j'utilise l'outil WindowBuilder d'Eclipse) et ça ne rend pas du tout comme je souhaite, et ça quand il ne m'affiche pas un seul des composants contenu dans mon JPanel... Je les utilise certainement très très mal cela dit, aurais-tu des conseils pour l'utilisation des LayoutManager/des tutos vers lesquels me rediriger ?

    Merci beaucoup pour ton aide en tout cas !

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

Discussions similaires

  1. Problème affichage Jtable
    Par totot dans le forum Composants
    Réponses: 0
    Dernier message: 14/05/2015, 13h13
  2. Problème d'affichage JTable
    Par sellamelie dans le forum Composants
    Réponses: 6
    Dernier message: 12/12/2013, 10h23
  3. Problèmes affichage Canvas3D dans JTable
    Par izineela dans le forum 3D
    Réponses: 2
    Dernier message: 22/06/2012, 17h11
  4. Problème d'affichage JTable (lignes triplées)
    Par DLProject dans le forum Composants
    Réponses: 3
    Dernier message: 13/02/2012, 17h28
  5. Problème affichage JTable
    Par matt8-5 dans le forum Composants
    Réponses: 3
    Dernier message: 03/04/2007, 18h25

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