Bonjour,
J'ai une JTable et je souhaiterais mettre plusieurs valeurs dans une cellule.
Est-ce possible et si oui comment avec les méthodes set et getValueAt
Bonjour,
J'ai une JTable et je souhaiterais mettre plusieurs valeurs dans une cellule.
Est-ce possible et si oui comment avec les méthodes set et getValueAt
Bonjour,
on peut mettre pratiquement tout ce que l'on veut dans une cellule de JTable.
Tout dépend de votre implémentation de la méthode getValue().
Qu'est-ce que vous y avez mis ?
Voici mes méthode get et set:
Par ailleurs,
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
49
50
51
52
53
54
55
56
57
58
59
60
61 public Object getValueAt(int row, int col){ String nom; String abreviation; int nbSeance; int ligne = 0; int colonne = 0; int uneSemaine = 0; Seance uneSeance = new Seance(); for(Seance seance : seances){ nom = seance.getModule().getNom(); abreviation = seance.getModule().getAbreviation(); nbSeance = seance.getModule().getNbSeance(); ligne = seance.getIndexLigne(); colonne = seance.getIndexColonne(); uneSemaine = seance.getSemaine(); Module module = new Module(); module.setNom(nom); module.setAbreviation(abreviation); module.setNbSeance(nbSeance); uneSeance.setModule(module); } if(seances.size() != 0){ if(row == ligne && col == colonne && semaine == uneSemaine){ return uneSeance.toString(); }else{ return ""; } }else return ""; } public void setValueAt(Object value, int row, int col){ String nom; String abreviation; int nbSeance; int ligne = 0; int colonne = 0; int uneSemaine = 0; Seance uneSeance = new Seance(); for(Seance seance : seances){ nom = seance.getModule().getNom(); abreviation = seance.getModule().getAbreviation(); nbSeance = seance.getModule().getNbSeance(); ligne = seance.getIndexLigne(); colonne = seance.getIndexColonne(); uneSemaine = seance.getSemaine(); Module module = new Module(); module.setNom(nom); module.setAbreviation(abreviation); module.setNbSeance(nbSeance); uneSeance.setModule(module); } if(seances.size() != 0){ if(row == ligne && col == colonne && semaine == uneSemaine){ uneSeance.toString(); } } }
Quand j'ajoute une valeur dans une cellule, la valeur de la cellule précédente que je vient de modifier disparait
Bonjour,
ce n'est pas la manière habituelle de procéder.
La fonction getValueAt() est appelée à chaque fois que la JTable doit être rafraîchie.
Si le tableau fait 4 colonnes sur 3 lignes, elle va être appelée 12 fois, avec les paramètres 'row' et 'col' qui vont être incrémentés automatiquement; de 0 à 3 pour les colonnes, et 0 à getRowCounts() - 1, pour les lignes.
C'est pour cela qu'il faut indiquer dans getRowCount, le nombre d'objets à afficher dans le tableau.
Pour en revenir à votre cas, il semble que ce soit les éléments de l'objet Seance qu'il faut afficher.
Donc dans getValueAt(), vous devez vous positionner sur l'élément Seance.get( row ), puis renvoyer l'élément voulu de Seance en fonction de 'col'.
Par exemple, en colonne '0', le nom du la séance; colonne '1', l'horaire; en colonne '2', le prix...
Voyez ce lien qui permet de faire un bon départ avec les JTable : http://baptiste-wicht.developpez.com.../swing/jtable/
J'ai refait commet ceci mais je n'arrive tout pas à remettre les valeur à la ligne, pourtant dans ma méthode toString() j'ai mis des \n:
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 public String getValueAt(int row, int col){ String chaine = null; if(seances.size() != 0){ for(Seance uneSeance : seances){ if(uneSeance.getIndexColonne() == col && uneSeance.getIndexLigne() == row && uneSeance.getSemaine() == semaine){ chaine = "<html><p>"+uneSeance.toString()+"</p></html>"; } } switch(col){ case 0: return chaine; case 1: return chaine; case 2: return chaine; case 3: return chaine; case 4: return chaine; case 5: return chaine; case 6: return chaine; default: return null; } }else{ return null; } }
Bonjour,
j'ai du mal à comprendre le fonctionnement de votre objet seances.
Pourquoi faire une boucle à chaque entrée dans getValue(), pour y chercher un objet seances, dont l'index colonne et l'index de ligne doit correspondre à 'col' et 'row' ?
Admettons que seances soit une ArrayList d'un objet comprenant 3 éléments String:
- String sTitre
- String sHoraire
- String sPrix (C'est un exemple)
Admettons que votre JTable doit afficher:
- en colonne 0, le titre,
- en colonne 1, l'horaire
- en colonne 2, le prix
Le remplissage de du tableau se fait simple comme suit:Ensuite s'il faut mettre plusieurs 'String' dans une même String, cela peut se faire dans chaque case éventuellement.
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 public Object getValueAt( int row, int col ) { seanceTemp = seances.get( row ); // Pointe sur l'élément seances correspondant à la ligne demandée par le rafraichissement de JTable switch( col ) { case 0: // Concerne le titre return seanceTemp.sTitre; // break; case 1: // Concerne l'horaire return seanceTemp.sHoraire; // break; case 2: // Concerne le prix return seanceTemp.sPrix; // break; default: return null; } }
Mais en premier lieu, je pense qu'il faut tirer au clair l'organisation de votre structure à afficher.
J'espère que ma réponse n'est pas hors sujet, et vous aide un peu...
Partager