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 :

Insertion d'une JTable dans une JTable


Sujet :

Composants Java

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Points : 149
    Points
    149
    Par défaut Insertion d'une JTable dans une JTable
    Bonjour à tous,

    Voilà je n'ai JAMAIS fait de JTable auparavant, et en lisant ce tuto, j'ai cru comprendre qu'il était possible d'insérer une JTable dans une JTable.

    De ce fait j'ai essayé d'en créer une avec 2 colonnes et dans chacune des colonnes j'insère une JTable de 30x30.

    Ca compile sans problème sauf que lorsque je démarre mon appli, dans lest cellules où devraient se trouver ma JTable se trouve un mesage d'erreur :

    javax.swing.JTable[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=251658568,maximumSize=,minimumSize=,preferredSize=,autoCreateColumnsFromModel=true,autoResizeMode=AUTO_RESIZE_SUBSEQUENT_COLUMNS,cellSelectionEnabled=false,editingColumn=-1,editingRow=-1,gridColor=javax.swing.plaf.ColorUIResource[r=122,g=138,b=153],preferredViewportSize=java.awt.Dimension[width=450,height=400],rowHeight=16,rowMargin=1,rowSelectionAllowed=true,selectionBackground=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],selectionForeground=sun.swing.PrintColorUIResource[r=51,g=51,b=51],showHorizontalLines=true,showVerticalLines=true]

    Voici mon 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
    21
    22
    23
    24
    25
    26
    27
     
    // Initialise le nom des colonnes
            initNomColonnes(); // Initialise des attributs privés de ma classe de type String []
     
            // Déclaration et initialisation des composants SWING
            JPanel panelPrincipal = new JPanel();
     
            Object[][] data = new Object[30][4];
            Object[][] data2 = new Object[30][30];
            JTable tableDroite = new JTable(1,2);
     
            JTable tableGauche = new JTable(data, nomColonnesGauche);
            // nomColonnesXXXX sont les attributs privés de ma classe
            JTable tableAT = new JTable(data2, nomColonnesAT);
            JTable tableECH = new JTable(data2, nomColonnesECH);
     
            tableDroite.setValueAt(tableAT, 0, 0);
            tableDroite.setValueAt(tableECH, 0, 1);
     
            // Ajout des composants SWING et des Layouts aux différents conteneurs
            this.setLayout(new FlowLayout());
            panelPrincipal.setLayout(new FlowLayout());
            JScrollPane panelGauche = new JScrollPane(tableGauche);
            JScrollPane panelDroite = new JScrollPane(tableDroite);
            panelPrincipal.add(panelGauche);
            panelPrincipal.add(panelDroite);
            this.add(panelPrincipal);
    Merci beaucoup d'avance !

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Ce n'est pas un message d'erreur. C'est la valeur renvoyée par la méthode "toString" de la JTable.
    Comme tu utilises le renderer par défaut, c'est l'affichage sous forme de String qui est fait.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Une JTable en tant que Renderer/Editor est une belle saloperie niveau gestion du focus, des updates et ainsi de suite.


    Que cherches tu à faire par une telle inclusion?

    Mais bon c'est faisable...
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  4. #4
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Points : 149
    Points
    149
    Par défaut
    En fait je cherchais à faire quelque chose d'assez difficile (j'ai mis une image en fichier attaché).

    Sur l'image je souhaite que seule la partie de droite soit scrollable horizontalement et la partie de gauche ET droite doivent se scroller ensemble verticalement.

    Assez difficile en fait...

    Sachant que la partie de droite en fait se décompose en 2 parties de 30 colonnes que par un bouton au dessus je pourrais cacher indépendamment.

    Si des gens ont des idées...
    Images attachées Images attachées  

  5. #5
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Mouaip.

    En fait la technique standard est d'avoir deux Jtable, une pour les colonnes fixes, une pour les colonne flottantes.
    La JTable pour les colonnes fixes doit être installée dans le rowHeader du JScrollPane
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monScrollPane.setRowHeaderView(maTableFixe);
    .
    Si tu veux avoir le header de ta JTable fixe, il faut également installer le TableHeader de ta JTable dans le coin supérieur gauche du JScrollPane.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monScrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER,maTableFixe.getTableHeader());
    la JTable flottante doit être installée de façon normale dans le JScrollPane.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  6. #6
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Points : 149
    Points
    149
    Par défaut
    Ok... Mais il reste le souci du scroll vertical simultané des 2 JTables...
    Comment faire ?

  7. #7
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Le scroll vertical simultané marche avec cette solution.

    Tu as du faire quelque chose d'anormal.

    Tu peux montrer ton code s'il te plait?
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  8. #8
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Points : 149
    Points
    149
    Par défaut
    Désolé je n'avais pas encore testé c'était juste de l'intuition (très mauvaise pour l'instant comme tu peux le constater...)

    Sinon pas mal effectivement c'est EXACTEMENT ce que je souhaitais, il y a juste que j'ai un souci (je suis en train d'essayer de le résoudre) avec les colonnes de la partie mobile. Le scroll horizontal ne s'affichait pas, donc je l'ai forcé avec la variable JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS mais malgré cela elle n'est pas active car mes colonnes s'affichent toutes mais pas comme il le faut. Je met une image en pièce attaché montrant mon résultat.

    Sinon voici mon 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    package Applet.bs.gui;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
     
     
    public class EcheancierPanel extends JPanel{
     
        private String[] _nomColonnesFixe;
        private String[] _nomColonnesMobile;
     
        public EcheancierPanel(String [] nomColonnesFixe, String [] nomColonnesMobile) {
     
            this._nomColonnesFixe = nomColonnesFixe;
            this._nomColonnesMobile = nomColonnesMobile;
     
            buildPanel();
        }
     
        private void buildPanel() {
     
            Object[][] data = new Object[10][_nomColonnesFixe.length];
            Object[][] data2 = new Object[10][_nomColonnesMobile.length];
     
            JTable tableFixe = new JTable(data, _nomColonnesFixe);
            JTable tableMobile = new JTable(data2, _nomColonnesMobile);
            JScrollPane monScrollPane = new JScrollPane(tableMobile);
     
            monScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
     
            monScrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER,tableFixe.getTableHeader());
            monScrollPane.setRowHeaderView(tableFixe);
     
     
            this.add(monScrollPane);
        }
    }
    Je vais y regarder mais si jamais quelqu'un a une idée (je n'avais jamais autant poussé en SWING avant, je me contentait de dessiner des rectangles un peu de layout des Frames et des Panel).

    NB : Les scrollbar n'apparaissent pas ici car mon JPanel est un peu plus grand, celle du dessous apparait plus bas et celle de droite n'apparait pas puisque le JPanel est suffisamment grand pour contenir toutes les "rows"
    Images attachées Images attachées  

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    je suppose que ton problème est que les colonnes ne sont pas assez larges? Tu dois créer ta JTable en lui passant un TableColumnModel de ton cru, qui permettra de définir les dimensions minimales de chaque colonne. Ou tu utilise le model par défaut, etu parcoure chaque colonne et tu fait appel à setMinWidth

  10. #10
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Points : 149
    Points
    149
    Par défaut
    Ok merci beaucoup !

    Bon et bien ne reste plus qu'à me pencher sur les TableColumnModel.
    Je teste ça et je vous dit !

  11. #11
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Essaie avec un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                       maTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    Sinon il te faut modifier les preferredSize des colonne dans le ColumnModel.
    Ou alors jouer sur la preferredSize des Renderers...
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  12. #12
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Points : 149
    Points
    149
    Par défaut
    Parfait !

    Merci sinok ta méthode marche AU POIL !!!

    Juste une dernière petite question... Lorsque ma JTable ne contient que quelques lignes (2 ou 3 par exemple), le JScrollPane n'est pas complètement rempli.

    Est-il possible de réduire la taille du JScrollPane pour qu'il ne contienne QUE la JTable ? Je pensais à modifier le Viewport du JScrollPane ou alors lui appliquer un GridBagLayout en lui mettant un poids non nul (weighty = 1.0 - et peut-être le weightx à la rigueur même si cela importe peu).

    En fait je vous explique :

    J'ai un JApplet, dans cet applet, j'ai un JPanel principal en BorderLayout. A l'emplacement NORTH j'ai un Panel contenant un titre et en position CENTER j'ai un JSplitPane (avec le split à la verticale - donc JSplitPane.HORIZONTAL_SPLIT -). Et dans la partie de droite donc, j'ai 3 JPanel les un en dessous des autres. Et j'ai 2 JPanel comme celui que je cherche à faire.

    Si vous avez une idée je suis preneur sinon ce n'est pas grave ! Merci quand même ^^

  13. #13
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maTable.setFillsViewportHeight(true);
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  14. #14
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Points : 149
    Points
    149
    Par défaut
    Alors tout d'abord sinok.... T'assures chaussure !!!

    Mais alors le problème c'est que je développe en 1.4... (et il m'est impossible de développer en 1.6)

    Mais bon soit tu as la solution soit ce n'est pas grave je vais bidouiller !

    Merci beaucoup !!!

  15. #15
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Juste en cas les version 1.4 et 1.5 de java ne sont plus supportées par Sun, de fait au moindre bug bloquant sur ces versions c'est foutu, il n'y aura pas de bugfix. La seule solution étant dans ce genre de cas de monter de version.

    Tu as un workaround pour contourner ce problème dans le bug report associé à ce problème:

    http://bugs.sun.com/bugdatabase/view...bug_id=4310721
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  16. #16
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par sinok Voir le message
    Juste en cas les version 1.4 et 1.5 de java ne sont plus supportées par Sun


    La 1.4 est supportée jusque avril 2018 dans le cadre du buisness support. Bien sûr, dans ce cas, faut payer

  17. #17
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Points : 149
    Points
    149
    Par défaut
    Merci à vous !!!

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

Discussions similaires

  1. [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
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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