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 :

Cacher une colonne


Sujet :

AWT/Swing Java

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 12
    Par défaut Cacher une colonne
    Bonjour à tous.
    Je travail avec des JTables et j'aimerai rendre une colonne invisible.
    J'ai vu que la "Column Class" possède la méthode "setHidden", mais elle ne semble pas pouvoir être appliquée sur la colonne d'une JTable.
    Quelqu'un peut-il donc venir à mon aide. Merci

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    C'est pas possible directement dans une JTable (bon avec un peu de travail c'est jouable), par contre c'est implémenté dans la JXTable du projet SwingLabs

  3. #3
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,
    Dans une JTable classique, il faut passer par un TableModel maison qui tient compte de quelles colonnes sont visibles et quelles colonnes sont cachées.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  4. #4
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 12
    Par défaut
    Alors avec un JtableModel j'ai cherché et je ne crois pas que ce soit possible.
    Quand on met la taille à 0, elle est minuscule mais visible.
    Et la JXTable je connait pas je vais dc voir. merci

  5. #5
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    salut,

    en utilisant un model et une table c'est tout a fait possible :

    il ne faut pas jouer sur la taille mais sur la description des colonnes :

    Dans mon model, moi je defini toujours un tableau de string comportant les noms des colonnes VISIBLES , ce tableau est renvoyé par les methodes getColumnName() et getColumnCount()

    et par contre qd tu remplis ton model tu rajoutes tes objets/valeurs dans les colonnes CACHEES qui ne sont pas décrites mais qui sont quand meme accessibles

    donc

    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
     
    // description des nom de colonnes dans mon Model par un Array
    private String[] _columnNames = 
    { "1col visible","2col visible"};
     
    //surcharge des methodes suivantes
    public String getColumnName(int c)
    {  
       return _columnNames[c];
    }
     
    public int getColumnCount()
    {  
       return _columnNames.length;
    }
     
    //et quand tu remplis , si par ex tu as 2 colonnes visible puis une troisieme cachée
     
    setValueAt("1ere valeur", row,0);
    setValueAt("2eme valeur", row,1);
    setValueAt("3eme valeur cachée", row,2);
    et voila

  6. #6
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Fais une recherche dans les post d'aujourd'hui, on a répondu à la même question il y a quelques heures...

    [EDIT]grillé[/EDIT]

  7. #7
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 12
    Par défaut
    ok merci, je regarde.

  8. #8
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 12
    Par défaut
    j'ai regardé ce que vs m'avez conseillé ainsi qu'à celui qui posait la même question. mais ... j'ai du mal comprendre.
    Je mets un nom de colonnes en moins que je ne mets de données sur une ligne mais l'info qui n'a pas de nom de colonne est perdu et c'est logique pour moi.

    "setValue(objet,row,column)" mais ce n'est pas un pbm.

    Dc pr moi ce n'est tjrs pas résolu.
    je pense qu'il ya quelque chose qui m'a échappé dans vos explications.

  9. #9
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 12
    Par défaut
    je vais voir avec le JXTable

  10. #10
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 12
    Par défaut
    C'est bon j'ai trouvé
    Après avoir créé mon tableau avec mon TableModel (= new JTable(monModel)) j'ai ajouté les lignes :

    TableColumn c0=tableau.getColumn(0)...
    tableau.remove(c0);

    et miracle ça fonctionne puisque je ne touche pas à mon model.
    J'espère que ça pourra servir (et que ce n''est pas une mauvaise blague de JBuilder ).

  11. #11
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Euh ... remove supprime définitivement la colonne de ton TableModel. Tu ne pourras plus la réafficher.

    Le TableModel est la classe qui contient les données, et définit comment les afficher. C'est dans cette classe que tu peux choisir de ne pas afficher (temporairement) une ou plusieurs colonnes (en gérant bien les méthodes getColumnCount(), getColumnNames(), get/setValueAt(int, int), et peut etre d'autres).
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  12. #12
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    Citation Envoyé par lapart
    j'ai regardé ce que vs m'avez conseillé ainsi qu'à celui qui posait la même question. mais ... j'ai du mal comprendre.
    Je mets un nom de colonnes en moins que je ne mets de données sur une ligne mais l'info qui n'a pas de nom de colonne est perdu et c'est logique pour moi.
    absolument pas !!!!
    ta colonne n'est pas affichée par la table mais elle existe belle et bien dans le model et tu peux acceder a la valeur de la colonne par la methode getValueAt() .....

  13. #13
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    Salut,

    J'aurai pu repartir sur un nouveau message mais là au moins on ne pourra pas me dire regarde sur le forum le sujet a déjà été traité 100 fois.

    j'ai appliqué la méthode de biozaxx [EDIT]8 posts au dessus!! [/EDIT]

    Si j'essaye d'accéder à une colonne qui ne figure pas dans ma liste de colonnes j'ai ca :
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 4 >= 4
    Pour ceux qui veulent voila un bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //ca c'est mes colonnes
    public static final String[] colonnes = {"Date","Libelle","Montant",""};
    //ici mon set value
    public void setValueAt(Object valeur, int row,int col) {
    		Object[] tab = LignesRemiseEnBanque.get(row);
    		tab[col] = valeur;
    	}
    Sachant que mon LignesRemiseEnBanque contient 5 colonnes et si je fait ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static final String[] colonnes = {"Date","Libelle","Montant","",""};
    il m'affiche bien mes 5 colonnes avec les valeurs qui vont bien et je peux récupérer les valeurs de la 5eme colonne...

  14. #14
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    salut,

    tu utilises bien un model pour stocker tes données ?
    ta stacktrace en entier elle dit quoi ? est ce que c'est bien sur []colonnes qui ce fait le indexOutOfBounds ?

  15. #15
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    Salut,

    et merci pour ton aide!!!

    Voila mon stacktrace :

    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 4 >= 4
    at java.util.Vector.elementAt(Unknown Source)
    at javax.swing.table.DefaultTableColumnModel.getColumn(Unknown Source)
    at javax.swing.JTable.convertColumnIndexToModel(Unknown Source)
    at javax.swing.JTable.getValueAt(Unknown Source)
    at com.htdsoft.ihm.ActionRemiseEnBanque$4.actionPerformed(ActionRemiseEnBanque.java:266)
    et ma ligne 266 au cas ou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    idreb = (Integer)table.getValueAt(a,RemiseEnBanqueTableModel.OPTION_COL);
    Je récupère l'objet de la ligne a et de la colonne RemiseEnBanqueTableModel.OPTION_COL qui est = à 4;

    Sinon dans mon tableModel
    j'ai
    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
    public static final int DATE_COL = 0;
    	public static final int LIBELLE_COL = 1;
    	public static final int MONTANT_COL = 2;
    	public static final int BQ_COL = 3;
    	public static final int OPTION_COL = 4;
    	public static final String[] colonnes = {"Date","Libelle","Montant",""};
     
    private static List<Object[]> LignesRemiseEnBanque = new ArrayList<Object[]>();
     
    public int getColumnCount() {
    		return colonnes.length;
    	}
     
    public Object getValueAt(int row, int col) {
    		Object[] tab = LignesRemiseEnBanque.get(row);
    		return 	tab[col];
    	}
     
    	public void setValueAt(Object valeur, int row,int col) {
    		Object[] tab = LignesRemiseEnBanque.get(row);
    		tab[col] = valeur;
    	}
    est ce que c'est bien sur []colonnes qui ce fait le indexOutOfBounds ?
    Je pense que oui, parce que si je mets public static final String[] colonnes = {"Date","Libelle","Montant","",""}; au lieu de public static final String[] colonnes = {"Date","Libelle","Montant",""};
    il m'affiche bien ma colonne et tout fonctionne correctement.

  16. #16
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    Re,

    J'ai testé avec une JXtable et j'ai le meme problème, pour cacher la colonne pas de problème mais par contre pour récupérer sa valeur, il veux pas (voir les messages d'erreurs de mes anciens post).
    Pourtant je passe bien par un getValueAt. Si la colonne est affichée y'a pas de problème mais si je la cache problème je ne peux pas récupérer ma valeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //je cache ma colonne
    matable.getColumnExt(CompteTreeTableModel.ID_COL).setVisible(false);
     
    //Y veux pas
    valeur = matable.getValueAt(ligne,CompteTreeTableModel.ID_COL);
     
     
    //je ne cache pas ma colonne
    matable.getColumnExt(CompteTreeTableModel.ID_COL).setVisible(true);
     
    //Y veux bien
    valeur = matable.getValueAt(ligne,CompteTreeTableModel.ID_COL);
    .

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    la valeur se récupére dans le model et non dans la JTable, d'ailleurs quelle que soit la table utilisées il faut toujours récupérer les valeurs dans le model

  18. #18
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    Yehhaaaaa

    C'est bon à savoir!!!

    MERCI

  19. #19
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    Citation Envoyé par grabriel
    Yehhaaaaa

    C'est bon à savoir!!!
    salut, désolé je reviens d'un grand week end

    heu quand je te demandais si tu utilisais un model , c'etait le sens de ma remarque j'aurai du etre plus explicite ...
    donc c bon tu recuperes toutes tes valeurs ?
    si oui, n'oublie pas te marquer le sujet comme résolu ca aidera forcement quelqu'un d'autre

    @+

  20. #20
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    Citation Envoyé par biozaxx
    si oui, n'oublie pas te marquer le sujet comme résolu ca aidera forcement quelqu'un d'autre

    @+
    Je ne suis pas l'auteur du sujet je suis venu tel morback le morpion profiter de la chaleur vos bons conseils.

Discussions similaires

  1. [VS2005] Datagrid -> cacher une colonne
    Par dacid dans le forum Windows Forms
    Réponses: 12
    Dernier message: 05/03/2010, 11h55
  2. [C#] Comment cacher une colonne d'un GridView ?
    Par dumser1 dans le forum ASP.NET
    Réponses: 15
    Dernier message: 11/12/2009, 15h58
  3. résultat de requète cacher une colonne
    Par pierre.egaud dans le forum Oracle
    Réponses: 2
    Dernier message: 09/03/2007, 10h24
  4. [C++ 6.0] : Cacher une colonne dans une liste
    Par Mirna dans le forum MFC
    Réponses: 1
    Dernier message: 08/02/2007, 19h31
  5. [C#] Cacher une colonne d'une dataGrid
    Par royrremi dans le forum ASP.NET
    Réponses: 2
    Dernier message: 27/05/2004, 16h00

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