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

Java Discussion :

Alimenter des données dans une Jtable


Sujet :

Java

  1. #1
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Points : 56
    Points
    56
    Par défaut Alimenter des données dans une Jtable
    Bonjour/soir cher collègues

    J'ai un problème qui me turlupine depuis un petit moment aujourd'hui.
    Je suis en train de coder une application éclatant des lignes d'un fichier et qui va me fournir les paramètres de ces lignes dans un visuel propre.

    Le soucis est que je sèche pour alimenter la table.

    Voici ma Jtable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //Création du tableau
    		String[] titreColonnes = { "MSG_ID", "Opérateur", "Temps perdu", "Date et Heure" };
    		Object[][] donnees = remplissage();
    		final JTable table = new JTable(donnees, titreColonnes);
    		table.setPreferredScrollableViewportSize(new Dimension(640, 200));
    		table.setFillsViewportHeight(true);
    		JScrollPane scrollPane = new JScrollPane(table);
    		panelcenttop.add(scrollPane);
    Et voici mon bout de 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
    private Object[][] remplissage(){
     
    		Object[][] liste;
                    java.awt.List liste_msg = new java.awt.List();
    		java.awt.List liste_user = new java.awt.List();
    		java.awt.List liste_temps = new java.awt.List();
    		java.awt.List liste_date = new java.awt.List();
     
    		for(int i = 0; i < elements.size(); i++){
    			liste_msg.add("" + elements.get(i).get_code_msgid());
    			liste_user.add("" + elements.get(i).get_code_user());
    			liste_temps.add("" + elements.get(i).get_temps());
    			liste_date.add("" /*+ elements.get(i).get_date()*/);
    		}
     
    		return null;
     
    	}

    "elements" est déclaré en private dans ma classe comme tel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private List<MSG_ID> elements = Analog.Anamain(); //renvoie la List<MSG_ID> (liste d'objets contenent les différents paramètres)

    Je n'arrive pas à trouver la solution dans remplissage() me permettant d'arriver à mes fins. Du coup pour continuer autre chose dans mon application, j'ai mis à null en retour pour le moment.

    En attendant toute aide bienvenue, je continue à chercher de mon côté

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    • Pourquoi utiliser des java.awt.List ???
    • MSG_ID c'est le nom d'une classe ? Et get_code_msgid() le nom d'une méthode ? Berk !
      Il serait préférable d'utiliser les règles de nommage Java
    • Un for sur une List via index ! re-Berk ! Utilises le for-étendus !


    Pour ton problème il "suffit" de remplir le 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
    	private Object[][] remplissage(){
    		Object[][] liste = new Object[elements.size()][];
    		int index = 0;
    		for (MSG_ID msg : elements) {
    			liste[index] = new Object[]{
    					msg.get_code_msgid(),
    					msg.get_code_user(),
    					msg.get_temps(),
    					msg.get_date()
    			};
    			index++;
    		}
    		return liste;
    	}

    Maintenant si tu veux un truc plus souple, je te conseille de créer ton propre TableModel...


    a++

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Points : 532
    Points
    532
    Par défaut
    Exactement, regarde du coté des TableModel afin de t'approprier la méthode getValueAt.

  4. #4
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    Merci pour les infos
    Je suis pas encore au taquet pour les foreach, du coup je reste dans mon petit monde du for int hihi

    Du coup mon remplissage est de la forme :

    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
    private Object[][] remplissage(){
     
    		Object[][] liste = new Object[elements.size()][4];
     
    		for(int i = 0; i < elements.size(); i++){
     
    			liste[i][0] = elements.get(i).get_code_msgid();
    			liste[i][1] = elements.get(i).get_code_user();
    			liste[i][2] = elements.get(i).get_temps();
    			liste[i][3] = "";
     
    		}
     
    		return liste;
     
    	}
    Donc mon tableau a un visuel sympathique maintenant puisqu'il se remplir en fonction des divers paramètres.
    Un petit problème subsiste, je peux déclarer une cellule cliquable mais non modifiable (car actuellement en la sélectionnant on peut écrire dedans) ?

    PS : oui MSG_ID est un objet et get_code_msgid va retourner son code. Je sais c'est moche, mais je dois utiliser ces termes
    Et pourquoi c'est beurk un for sur une liste via index ?

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Baboulinet_ Voir le message
    Un petit problème subsiste, je peux déclarer une cellule cliquable mais non modifiable (car actuellement en la sélectionnant on peut écrire dedans) ?
    Le plus simple serait de passer par un TableModel...

    Si tu veux rester sur quelque chose de basique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	DefaultTableModel model = new DefaultTableModel(donnees, titreColonnes) {
    		public boolean isCellEditable(int row, int column) {
    			return false; // aucun cellule editable
    		}
    	};
    	final JTable table = new JTable(model);

    Citation Envoyé par Baboulinet_ Voir le message
    Et pourquoi c'est beurk un for sur une liste via index ?
    Le for-étendus est plus simple à lire, et il garantie le meilleur compromis de performance.

    L'accès par index peut être catastrophique avec certaines implémentations.



    a++

  6. #6
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    Merci beaucoup adiGuba

    Ça fait quelques jours que je suis sur cette application et j'avoue que j'ai un peu de mal.

    3 ans que j'avais pas fait de java

    Admettons que je veuille cliquer sur une colonne pour trier le tableau par rapport à cette colonne. Suis-je obligé de créer un combobox pour le nom de cette colonne ? et dois-je du coup l'insérer dans le model de la table?

  7. #7
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Le tri se fait en quelques lignes de code : http://download.oracle.com/javase/tu...e.html#sorting


    a++

  8. #8
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    Il est bien sympatoche ce site, merci.
    En anglais, mais pas bien compliqué à comprendre quand même.

    Pourtant je n'ai pas trouvé mon bonheur quant à la résolution de ce problème :

    Lorsque je clic sur une cellule, cette action doit m'afficher du texte dans une zone de texte en dessous mon tableau. Cette zone de texte ne se met pas à jour, pourquoi ?

    Je trouve que mon code est bon, mais il y a surement quelque chose à rajouter, mais quoi ?

    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
    //Création du tableau
    		String[] titreColonnes = { "MSG_ID", "Opérateur", "Temps perdu", "Date et Heure" };
    		Object[][] donnees = remplissage();
     
    		DefaultTableModel model = new DefaultTableModel(donnees, titreColonnes) {		
    			public boolean isCellEditable(int row, int column) {
    				return false; //aucune cellule editable
    			}
    		};
     
    		final JTable table = new JTable(model);
    		table.setAutoCreateRowSorter(true);
    		table.setPreferredScrollableViewportSize(new Dimension(640, 200));
    		table.setFillsViewportHeight(true);
    		JScrollPane scrollPane = new JScrollPane(table);
     
    		table.addMouseListener(new MouseAdapter() { 
    			  public void mouseClicked(MouseEvent e) { 
    			    if (e.getClickCount() == 1) { 
    			      	str = "Données communes au msgid et à l'utilisateur !"; //remplissage_texte();
    			    } 
    			  } 
    			}); 
     
    		panelcenttop.add(scrollPane);
     
    		JTextArea zone_texte = new JTextArea(str);
          	JScrollPane scroll_texte = new JScrollPane(zone_texte);
    		panelcent.add(scroll_texte);

  9. #9
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    Haha sisi c'est bon, quel nul je suis.
    Il s'agit d'un zone_texte.setText au lieu d'utiliser mon str...
    Merci à ceux qui ont cherché et merci pour toute l'aide apportée pour ce topic

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

Discussions similaires

  1. [JTable] Personnaliser l'insertion des données dans une colonne
    Par grospatapouf dans le forum Composants
    Réponses: 0
    Dernier message: 15/10/2008, 08h34
  2. Réponses: 4
    Dernier message: 05/07/2008, 20h06
  3. Interdire les modifications des données dans une JTable
    Par markfish55 dans le forum Composants
    Réponses: 3
    Dernier message: 19/12/2006, 15h48
  4. [SQL server] Comment Fusionner des données dans une requête
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 15h24
  5. Réponses: 2
    Dernier message: 15/06/2005, 17h32

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