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 :

[Débutant] [JTable] affichage d'un vecteur


Sujet :

Composants Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut [Débutant] [JTable] affichage d'un vecteur
    Bonjour à tous,

    J'ai quelque petit souci avec les JTable... En faite je n'y comprend rien

    J'ai trouvé pas mal d'exemple sur le net, mais soit ils sont trop simples, soit trop compliqués, je n'ai pas trouvé de juste milieu

    Dans mon cas je voudrais afficher le contenu d'un vecteur dans une JTable voila comment je m'y prend :

    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
     
     
    String[] colNames = {"Référence","Marque","Prix",};
    Object[][] data = null;
    private JTable table;
     
    for&#40;int i=0;i<vecFrameArt.size&#40;&#41;;i++&#41;	
        	&#123;
        		String ref = &#40;&#40;Article&#41; vecFrameArt.elementAt&#40;i&#41;&#41;.getRef&#40;&#41;;
        		String mrq = &#40;&#40;Article&#41; vecFrameArt.elementAt&#40;i&#41;&#41;.getMarque&#40;&#41;;
        		String prx = Double.toString&#40;&#40;&#40;Article&#41; vecFrameArt.elementAt&#40;i&#41;&#41;.getPrix&#40;&#41;&#41;;
     
        		data = &#123;ref,mrq,prx&#125;;
        	&#125;
    table = new JTable &#40;data, colNames&#41;;
    Je bosse sous eclipse, et quand je lance mon prog. il m'affiche cette erreur :

    Les constantes de tableaux peuvent être utilisées uniquement dans des initialiseurs

    J'espère que vous saurez m'aiguiller
    MERCI


    [ Modéré par Viena ]
    Ajout d'un tag et modification du titre : Pour la compréhension de tous, utilisez un titre clair et les tags ! merci.

    Les Règles du Forum
    [ Sujet déplacé depuis le forum java par Viena ]
    Les Règles du Forum

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 104
    Points : 140
    Points
    140
    Par défaut
    Tu n'as pas le droit d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data = &#123;ref,mrq,prx&#125;;
    Le seul endroit où ce genre d'écriture est permis est dans une déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object&#91;&#93; data = &#123;ref,mrq,prx&#125;;

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Bouhouhou

    J'y arrive pô... Sérieux je ne comprends pas comment on peu créer "dynamiquement" une JTable. La seul chose qui est a peu près clair c'est ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    String&#91;&#93; columnNames = &#123;"Référence","Désignation","Caractéristiques","Quantité","Prix Unitaire","total"&#125;;
     
        Object&#91;&#93;&#91;&#93; data = &#123;
          &#123;"Mary", "Campione","Snowboarding", new Integer&#40;5&#41;, new Boolean&#40;false&#41;,new Float&#40;4.50&#41;&#125;,
          &#123;"Alison", "Huml","Rowing", new Integer&#40;3&#41;, new Boolean&#40;true&#41;,new Float&#40;15.70&#41;&#125;,
          &#123;"Kathy", "Walrath","Knitting", new Integer&#40;2&#41;, new Boolean&#40;false&#41;,new Float&#40;9.10&#41;&#125;,
          &#123;"Sharon", "Zakhour","Speed reading", new Integer&#40;20&#41;, new Boolean&#40;true&#41;,new Float&#40;3&#41;&#125;,
          &#123;"Philip", "Milne","Pool", new Integer&#40;10&#41;, new Boolean&#40;false&#41;,new Float&#40;22.50&#41;&#125;
        &#125;;
     
        JTable table = new JTable&#40;data, columnNames&#41;;
    Maintenant j'aimerais qu'a la place des Alison, Kathy et compagnie, il y est des arguments de mon vecteur.
    Comment suis-je sensé m'y prendre ? ça fais trois jours que je cherche sur le net, et je n'ai rien trouvé

    Je vous serais extrèmement reconnaissant d'au moins aiguiller mes recherches.

    Merci

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Points : 288
    Points
    288
    Par défaut
    excuse moi mais tu peux mettre un echantillon du code de ton vecteur ?
    tu as pensé au TableModel ?

  5. #5
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    En fait, tout dépend de ce que tu as.
    Si tu as déjà un Vecteur de vecteur, donc chaque "sous-vecteur" contient le même nombre d'éléments, correspondant à chacune de tes lignes, alors il te suffit de créer un nouveau Vector dans lequel tu ajoutes tous les noms de tes colonnees, puis tu instancie ta JTable avec le constructeur JTable(Vector data, Vector columnNames)

    Sinon, je te conseille de créer un TableModel, grâce au quel tu vas instancier ta JTable.
    Tu devras alors remplir ton tableau d'objets comme bon te semble grâce à des différentes sources de données (ton vecteur...) puis dans ton TableModel tu utilises les méthodes getValueAt() et getColumnName() pour récupérer les infos que tu veux, ou tu veux...

    Bref, dis nous en un peu plus sur ce quee tu as et la façon dont tu veux créer ta JTable et on pourra encore mieux te guider.
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Ces un vecteur d'article, il y a :
    {String ref, String marque, double prix, String option}

    Quand au TableModel, j'ai vu ce truk plusieurs fois mais sans trop comprendre Je vais orienter mes recherche vers ça.

    Merci je vous tiens au courant

  7. #7
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    Dasn ce cas je te laisse un peu chercher pour le TableModel, mais voici un bref apperçu de ce que tu pourrais faire...
    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
    public Object getValueAt&#40;int row, int col&#41;
    	&#123;
    		Object columnValue = null;
     
    		switch &#40;col&#41;
    		&#123;
    			case 0&#58;
    				columnValue = &#40;&#40;articles&#41;dataVector.getElement&#40;row&#41;&#41;.getRef&#40;&#41;;
    				break;
    ... //Tu répètes le case pour chaque élément de ton article...
     
    			default&#58;
    				break;
    		&#125;
     
    		return columnValue;
    	&#125;
    Voilà, avec quelque chose qui ressemble à ça, tu peux rapidement te faire une JTable dynamique selon ton Vector et ses articles...

    Après libre à toi de surcharger les méthodes setValue(), getColumnNames(), isCellEditable() et autres selon ton gré.

    Il y a de nombreux post sur les JTable et les méthodes ci-dessus (notament si tu veux mettre autre chose que du texte dans tes cellules, si tu veux pouvoir changer leur contenu, etc...) alors n'hésite pas à te plonger dans la recherche avancée.
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  8. #8
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    Déjà pour commencer pour ne pas instancier un objet Article temporaire dans ta boucle for ?

    Ensuite, pour chaque element de ton vector, tu instancies donc un article, tu récupères les attributs qui t'interresses et tu les stock dans un tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Object&#91;&#93;&#91;&#93; tab2 = new Object&#91;vecFrameArt.size&#40;&#41;&#93;&#91;100&#93;
    for&#40;int i = 0;i < vecFrameArt.size&#40;&#41;; i++&#41;  
    &#123;  
    Article monArticle = new Article&#40;&#41;;//Article temporaire
    monArticle = &#40;monArticle&#41;vecFrame.elementAt&#40;i&#41;;
    String&#91;&#93; tab = new String&#91;nombre_attributs&#93;;
     
    tab&#91;0&#93; = monArticle.get...
    tab&#91;1&#93; = monArticle.get...
    tab&#91;2&#93; = monArticle.get...
    ...
    tab2&#91;i&#93; = tab;
    &#125;
    JTable maJTable = new JTable&#40;new MyModel&#40;tab2, colonne&#41;&#41;;
    ...je ne sais pas si je suis clair d'un coup là... :
    L'interêt du doute est que cela fait avancer.
    (parenthèses)Je suis à la recherche d'un emploi sur Valence(26) et ses environs.
    mon cv:
    http://charegis.netcv.org/

  9. #9
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    Oui, mais si tu veux éviter les problèmes d'occupation mémoire trop importante, tu as intérêt à ne pas instancier d'objets dans une boucle, mais avant...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Object&#91;&#93;&#91;&#93; tab2 = new Object&#91;vecFrameArt.size&#40;&#41;&#93;&#91;100&#93; 
    Article monArticle = null; //Article temporaire 
    for&#40;int i = 0;i < vecFrameArt.size&#40;&#41;; i++&#41;  
    &#123;  
    monArticle = null;
    monArticle = &#40;monArticle&#41;vecFrame.elementAt&#40;i&#41;; 
    ... reste de la boucle.
    Cela dit, avec les nouvelles version de Java, je ne pense pas que (disons... je ne sais pas si) tu as intérêt à enregistrer ton objet dans une variable locale.
    Cet objet est dans le vector, alors pourquoi le dupliquer ? La JRE va le chercher directement et facilement, et avec les optimisation du code pendant la précompilation je pense qu'il ne le cherche pas plusieurs fois si tu fais plusieurs accès successif.

    A confirmer par les experts (non non, je ne pense ni à Gfx ni à Adi_guba...)

    En même temps on s'éloigne peut-être un peu du sujet initial là...
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Merci à tous j'ai réussi :

    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
     
    String&#91;&#93; colNames = &#123;"Référence","Marque","Prix"&#125;;
        	Object&#91;&#93;&#91;&#93; data = new Object&#91;vecFrameArt.size&#40;&#41;&#93;&#91;4&#93;;
     
        	for&#40;int i = 0;i < vecFrameArt.size&#40;&#41;; i++&#41;  
        	&#123;   
        		String&#91;&#93; tabTmp = new String&#91;3&#93;; 
        		tabTmp&#91;0&#93; = &#40;&#40;Article&#41; vecFrameArt.elementAt&#40;i&#41;&#41;.getRef&#40;&#41;;
        		tabTmp&#91;1&#93; = &#40;&#40;Article&#41; vecFrameArt.elementAt&#40;i&#41;&#41;.getMarque&#40;&#41;;
        		tabTmp&#91;2&#93; = Double.toString&#40;&#40;&#40;Article&#41; vecFrameArt.elementAt&#40;i&#41;&#41;.getPrix&#40;&#41;&#41;;
     
    			data&#91;i&#93; = tabTmp;
        	&#125;
        	MyTableModel tabMod = new MyTableModel&#40;data,colNames&#41;;
        	JTable table = new JTable&#40;&#41;;
        	table.setModel&#40;tabMod&#41;;
    Par contre j'ai d'autre problèmes : le nom des colonnes ne s'affiche pas, et je n'arrive pas a mettre en place un ScrollBar horizontal

    Je vous montre quand même ma classe MyTableModel :

    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
    47
    48
     
    package commande;
     
    import javax.swing.table.*;
     
    public class MyTableModel extends AbstractTableModel&#123;
     
     
    	private static final long serialVersionUID = 1L;
    	private Object data&#91;&#93;&#91;&#93;;
    	private String&#91;&#93; colNames;
     
    	public MyTableModel&#40;Object d&#91;&#93;&#91;&#93;, String c&#91;&#93;&#41;
    	&#123;
    		data = d;
    		colNames = c;
    	&#125;
     
    	public int getRowCount&#40;&#41;
    	&#123;
    		return data.length;
    	&#125;
     
    	public int getColumnCount&#40;&#41;
    	&#123;
    		return colNames.length;
    	&#125;
     
    	public Object getValueAt&#40;int parm1, int parm2&#41;
    	&#123;
    		return data&#91;parm1&#93;&#91;parm2&#93;;
    	&#125;
     
    	public Class getColumnClass&#40;int c&#41;
    	&#123;
    		return getValueAt&#40;0, c&#41;.getClass&#40;&#41;;
    	&#125;
     
    	public boolean isCellEditable&#40;int row, int col&#41;
    	&#123;
    		return true;
    	&#125;
     
    	public String getColumnName&#40;int col&#41;
    	&#123;
    		return colNames&#91;col&#93;;
    	&#125;
    &#125;
    Merci encore, je continu mes recherches

  11. #11
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    C'est normal que le nom de tes colonnes ne s'affichent pas si tu n'as pas mis ta table dans un JScrollPane.

    Là c'est le code du "container" ou tu insères ta table dont nous avons besoin.

    En gros, il te faut un code du genre ça (tapé à la volé, donc fait attention aux erreurs -> vois le plutôt comme un algo !)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    JPanel conteneur=new JPanel&#40;new BorderLayout&#40;&#41;&#41;;
    JTable maTable=new JTable&#40;new myModel&#40;&#41;&#41;;
    JScrollPane panneauTable=new JScrollPane&#40;maTable&#41;;
    conteneur.getContentPane&#40;&#41;.add&#40;panneauTable&#41;;
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    C Recool, REmerci

    Je fais des recherche sur les scrollBar mais il me met des erreurs bizar, si vous avez une idée, ça m'aiderais parceque je dois rendre mon prog. demain

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    HEHE!! je crois que j'ai trouvé en faite

    Par contre j'aimerais que vous me donniez votre avis, s'il vous plait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    MyTableModel tabMod = new MyTableModel&#40;data,colNames&#41;;
    JTable table = new JTable&#40;&#41;;
    table.setModel&#40;tabMod&#41;;
     
    JScrollPane scrollTable = new JScrollPane&#40;table&#41;;
    JScrollBar scrollBTable = new JScrollBar&#40;&#41;;
    scrollTable.setVerticalScrollBar&#40;scrollBTable&#41;;
    Alors ? qu'est ce que vous en pensez ? je n'ai pas trop le temps de faire des lignes et des lignes pour savoir si le scrollBar va s'afficher.
    EH! oui, faut que je me penche sur les JOptionPane

    Merci encore

Discussions similaires

  1. [débutant] [JTextPane] affichage similaire au JTextField
    Par Gougou dans le forum Composants
    Réponses: 4
    Dernier message: 31/08/2005, 06h25
  2. Réponses: 18
    Dernier message: 25/08/2005, 18h46
  3. [Débutant][JTable] Comment ça marche?
    Par Nasky dans le forum Composants
    Réponses: 7
    Dernier message: 02/08/2005, 16h04
  4. [débutant] JTable + selection
    Par pingoui dans le forum Composants
    Réponses: 2
    Dernier message: 21/09/2004, 11h49
  5. [JTABLE] Affichage du nom de la colonne
    Par cameleon2002 dans le forum Composants
    Réponses: 3
    Dernier message: 01/07/2004, 12h08

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