Précédent   Forum du club des développeurs et IT Pro > Java > Interfaces Graphiques en Java > AWT/SWING > Composants > Tables
Tables JTable, JXTable, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Actualité déjà publiée
 
Outils de la discussion
Publicité
'
Vieux 19/02/2011, 21h41   #21
Zantetchou
Invité de passage
 
Inscription : février 2011
Messages : 2
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 2
Points : 2
Points : 2
Merci pour ce tuto, il m'a bien aidé =D

J'ai tout de même une question.

J'ai 2 JTable qui sont censées afficher certaines informations enregistrées dans 2 listes différentes.
Mon code fonctionnait pour l'affichage d'une JTable (merci ), mais je me suis retrouvé coincé pour la deuxième.

Je poste une partie simplifiée de mon code source, puis je poserais ma question.

Un première classe qui représente un attribut :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class ClassDiagramClassAttribute
{
	private int idAttribute;
	private String name;
	private String type;
	private String value;
	private String visibility;
        ...
 
    public ClassDiagramClassAttribute()
    {
 
    }
...
Mes getters et setters
...
}

Un deuxième classe qui représente une opération :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ClassDiagramClassOperation
{
	private int idOperation;
	private String name;
	private String type;
	private String visibility;
        ...
 
    public ClassDiagramClassOperation()
    {
 
    }
...
Mes getters et setters
...
}
Une troisième classe qui représente une classe (UML) :
Code :
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
public class ClassDiagramClass extends AbstractTableModel
{
	private int idClass;
        ...
 
	private List<ClassDiagramClassAttribute> attribute = new ArrayList<ClassDiagramClassAttribute>();
    private String[] columnNamesAttribute = {"", "Nom", "Type"};
 
	private List<ClassDiagramClassOperation> operation = new ArrayList<ClassDiagramClassOperation>();
    private String[] columnNamesOperation = {"Nom", "Type", "Visibilité"};
 
    public ClassDiagramClass()
    {
 
    }
...
Mes getters et setters
...
	public void setAttribute(List<ClassDiagramClassAttribute> attribute)
	{
		this.attribute = attribute;
	}
	public List<ClassDiagramClassAttribute> getAttribute()
	{
		return attribute;
	}
 
	public void setOperation(List<ClassDiagramClassOperation> operation)
	{
		this.operation = operation;
	}
	public List<ClassDiagramClassOperation> getOperation()
	{
		return operation;
	}
 
 
    public int getRowCount()
    {
//************************* ICI ***************************
    		return getAttribute().size();
    		return getOperation().size();
    }
 
    public int getColumnCount()
    {
//************************* ICI ***************************
    		return columnNamesAttribute.length;
    		return columnNamesOperation.length;
 
    }
 
    public String getColumnName(int columnIndex)
    {
//************************* ICI ***************************
    		return columnNamesAttribute[columnIndex];
    		return columnNamesOperation[columnIndex];
    }
 
    public Object getValueAt(int rowIndex, int columnIndex)
    {
//************************* ICI ***************************     
         if (columnIndex == 0)
        	return getAttribute().get(rowIndex).isKey();
 
        else if (columnIndex == 1)
            return getAttribute().get(rowIndex).getName();
 
        else if (columnIndex == 2)
            return getAttribute().get(rowIndex).getType();
 
        else
            return null; //Ne devrait jamais arriver
 
//************************* ICI ***************************
        if (columnIndex == 0)
        	return getOperation().get(rowIndex).getName();
 
		else if (columnIndex == 1)
			return getOperation().get(rowIndex).getType();
 
        else if (columnIndex == 2)
            return getOperation().get(rowIndex).getVisibility();
 
        else
            return null; //Ne devrait jamais arriver
    }
...
}
Voilà.
Etant encore débutant en Java, je m'excuse d'avance si mon code est mal écrit, et pour mes explications surement boiteuses. ='

Donc mon problème est :
Dans les méthodes getRowCount(), getColumnCount(), getColumnName(int columnIndex) et getValueAt(int rowIndex, int columnIndex), si on retire le/les return de trop, ça marche ( Je peux soit afficher mon JTable d'attributs, soit mon JTable d'opérations )
Mais, j'aimerais afficher les deux. ( d'où les /*** ICI ***/ )

Donc, est-ce-que vous connaissez un moyen afin de réaliser cela ? ( J'espère bêtement un simple if, mais on peut toujours rêver =' )
Si non, avez-vous une idée à me proposer ?

Merci d'avance, et bonne soirée.

PS : Je ne sais pas si ça peut aider, mais les JTable s'affichent dans deux JFrame différentes, qui sont elles mêmes dans un JTabbedPane.
Zantetchou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 22h08   #22
william44290
Membre chevronné
 
Avatar de william44290
 
Homme William Rosenthal
Responsable de service informatique
Inscription : juin 2009
Messages : 400
Détails du profil
Informations personnelles :
Nom : Homme William Rosenthal
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique

Informations forums :
Inscription : juin 2009
Messages : 400
Points : 606
Points : 606
je ferais trois abstractModel différent.
william44290 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 23h05   #23
Zantetchou
Invité de passage
 
Inscription : février 2011
Messages : 2
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 2
Points : 2
Points : 2
Merci pour ta réponse.

J'ai testé ton idée et elle marche
Enfin, ça marche même pour deux AbstractTableModel ( Dans mon code, dans les classes ClassDiagramClassAttribute et ClassDiagramClassOperation, au lieu de ClassDiagramClass )

Mais du coup, même si ça me plaît pas trop, j'en ai tout de même trois : j'ai une méthode permettant d'ajouter mon attribut/opération dans sa liste et aussi dans la JTable ; ça me faisait bizarre d'ajouter un attribut/opération dans la même class qui contient ses informations
Zantetchou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 23h32   #24
william44290
Membre chevronné
 
Avatar de william44290
 
Homme William Rosenthal
Responsable de service informatique
Inscription : juin 2009
Messages : 400
Détails du profil
Informations personnelles :
Nom : Homme William Rosenthal
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique

Informations forums :
Inscription : juin 2009
Messages : 400
Points : 606
Points : 606
Comme toujours, tout est possible en java. Le problème c'est de choisir.
william44290 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 16h59   #25
michon
Membre éclairé
 
Mickael
Inscription : mai 2010
Messages : 247
Détails du profil
Informations personnelles :
Nom : Mickael
Âge : 25
Localisation : France, Bas Rhin (Alsace)

Informations forums :
Inscription : mai 2010
Messages : 247
Points : 356
Points : 356
Je cherchait justement une bonne solution d'affichage de tableau... et je suis tombé sur ton tutoriel qui est parfaitement clair à mes yeux.

Merci et beau boulot, tu vas me faire gagner pas mal de temps
__________________
C'est en aidant les autres qu'on en apprend beaucoup soi-même
michon est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/07/2011, 10h27   #26
jaira
Invité de passage
 
Femme
Développeur Web
Inscription : avril 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2011
Messages : 6
Points : 4
Points : 4
Par défaut Soucis

Bonjour Baptiste

merci déjà pour ton tuto très sympa, il m'a fait progresser pas mal.

Ai un peu eu du mal car j'ai du adapter mon exercice. Mais ca en valait la peine. Jusque là (point 5), ca fonctionne très bien.

Merci j'espère que tu feras d'autres tuto
jaira est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/12/2011, 12h07   #27
thierryler
Rédacteur
 
Avatar de thierryler
 
Homme Thierry Leriche-Dessirier
Inscription : octobre 2007
Messages : 2 144
Détails du profil
Informations personnelles :
Nom : Homme Thierry Leriche-Dessirier
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 2 144
Points : 5 910
Points : 5 910
Bonjour et félicitations,

Très bon article, associé à des remarques excellentes.

J'y fais référence dans mes cours, ainsi que dans un prochain article.
__________________
Thierry Leriche-Dessirier
Ingénieur Architecte JEE Freelance
Rédacteur pour Developpez
Professeur de Génie Logiciel à l'ESIEA

Page sur Developpez : http://thierry-leriche-dessirier.developpez.com
Site : http://www.icauda.com
Linked'in : http://www.linkedin.com/in/thierryler
Twitter : http://www.twitter.com/thierryleriche
thierryler est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/12/2011, 15h11   #28
kalina
Membre actif
 
Avatar de kalina
 
Inscription : avril 2009
Messages : 146
Détails du profil
Informations personnelles :
Localisation : Algérie

Informations forums :
Inscription : avril 2009
Messages : 146
Points : 164
Points : 164
salut et merci pour l'article, ça va beaucoup m'aider car j'utilise souvent les JTables. Cependant j'aurais une petite question idiote: serait-il possible de supprimer une ou plusieurs cellules notamment sur la dernière ligne?
je m'explique :par exemple si la dernière cellule de la dernière ligne correspond au total de ma denière colonne et qu'il n'ya rien à afficher sur les cellules qui précèdent le total, ben moi j'aurais voulu pouvoir les enlever tout bêtement!
voilà, j'espère m'être bien expliquée!
sinon merci et bonne continuation
kalina est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/05/2012, 15h47   #29
Hep!
Invité de passage
 
Inscription : mars 2005
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 6
Points : 4
Points : 4
Par défaut probleme affichage

Bonjour,

Merci pour ce tuto, il est bien foutu! ;-)
Hep! est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/08/2012, 18h18   #30
aljessy
Membre actif
 
Avatar de aljessy
 
Homme Guy Alexis
Développeur Java
Inscription : octobre 2010
Messages : 248
Détails du profil
Informations personnelles :
Nom : Homme Guy Alexis
Âge : 26
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2010
Messages : 248
Points : 153
Points : 153
Envoyer un message via Yahoo à aljessy Envoyer un message via Skype™ à aljessy
Bonjour, tout d'abord merci pour ce tutoriel. Mais j'ai un petit problème. En fait je me suis basé sur ce tutoriel pour créer un tableau à trois colonnes et parmi l'une des colonnes, j'ai l'une qui contient un checkbox. Je n'arrive pas à pouvoir décocher le checkbox une fois que je clique dessus. voici à quoi ressemble ma méthode getColumnClass.

Code :
1
2
3
4
5
6
7
8
9
10
 public Class getColumnClass(int columnIndex){
        switch(columnIndex){
            case 0:
                return Color.class;
            case 2:
            	return Boolean.class;
            default:
                return Object.class;
        }
    }
Maintenant comment faire pour que l'on puisse editer ce checkbox? J'ai penser à crée une méthode qui étend un DefaultTableCellRenderer mais je ne sais pas comment l'implémenter et même si c'est le meilleur moyen de proceder
__________________
Faire aisément ce qui est difficile aux autres, voilà le talent. Faire ce qui est impossible au talent, voilà le génie.
aljessy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2012, 12h43   #31
sinok
Modérateur
 
Avatar de sinok
 
Inscription : août 2004
Messages : 8 644
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : août 2004
Messages : 8 644
Points : 12 452
Points : 12 452
Pas besoin de ça. Normalement, par défaut, la JTable te met bien une JCheckBox éditable pour les colonnes renvoyant Boolean.class.

As tu pensé à rendre ta colonne éditable dans ton modèle (renvoyer true dans la méthode isCellEditable pour la colonne en question)
__________________
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.
sinok est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2012, 09h26   #32
aljessy
Membre actif
 
Avatar de aljessy
 
Homme Guy Alexis
Développeur Java
Inscription : octobre 2010
Messages : 248
Détails du profil
Informations personnelles :
Nom : Homme Guy Alexis
Âge : 26
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2010
Messages : 248
Points : 153
Points : 153
Envoyer un message via Yahoo à aljessy Envoyer un message via Skype™ à aljessy
Citation:
As tu pensé à rendre ta colonne éditable dans ton modèle (renvoyer true dans la méthode isCellEditable pour la colonne en question)
Oui je l'ai fait sauf que ma colonne n'est toujours pas éditable. Pour plus de précision, mon tableau a trois colonnes la première recoit une couleur, la seconde une chaine de caractère et la troisième un booléen. voici l'instruction de j'utilise pour ajouter une ligne à mon tableau:
Code :
lignes.add(new LigneTab(Color.blue, evt.getIdOM(), new Boolean(true)));
et voici mes méthode getValuesAt(..) et isCellEditable(..)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		switch (columnIndex) {
			case 0:
				return lignes.get(rowIndex).getCouleur();
			case 1:
				return lignes.get(rowIndex).getAvatar();
			case 2:
				return lignes.get(rowIndex).isAffiche();	
			default:
				return null;
		}
 
	}
 
	public boolean isCellEditable(int rowIndex, int columnIndex) {
        if (columnIndex > 1) {
            return true;
        } else {
            return false;
        }
    }
D'où peut venir mon problème
__________________
Faire aisément ce qui est difficile aux autres, voilà le talent. Faire ce qui est impossible au talent, voilà le génie.
aljessy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2012, 10h29   #33
aljessy
Membre actif
 
Avatar de aljessy
 
Homme Guy Alexis
Développeur Java
Inscription : octobre 2010
Messages : 248
Détails du profil
Informations personnelles :
Nom : Homme Guy Alexis
Âge : 26
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2010
Messages : 248
Points : 153
Points : 153
Envoyer un message via Yahoo à aljessy Envoyer un message via Skype™ à aljessy
J'ai résolu mon problème. juste que j'avais oublier la fonction setValueAt(..)
__________________
Faire aisément ce qui est difficile aux autres, voilà le talent. Faire ce qui est impossible au talent, voilà le génie.
aljessy est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/12/2012, 13h26   #34
sokarcreative
Invité de passage
 
Homme
Étudiant
Inscription : août 2012
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2012
Messages : 3
Points : 4
Points : 4
Cet article est très intéressant, merci !
sokarcreative est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/02/2013, 22h51   #35
kersu
Invité de passage
 
Inscription : octobre 2005
Messages : 14
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 14
Points : 4
Points : 4
Très bon tuto, cela m'a beaucoup aidé dans mon projet.

Une petite question : j ai transformé le code pour gérer une filmothèque.
Tout fonctionne, mais j'utilise une des colonnes pour afficher une affiche de film (ImageIcon).

J'ai comme résultat le haut de l'affiche affiché sur la hauteur de la ligne du tableau. Comment adapter la hauteur des lignes par rapport aux composants ?

Merci, et bravo pour ce tuto.
kersu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Actualité déjà publiée
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h27.


 
 
 
 
Partenaires

Hébergement Web