JTable

Signaler
Messages postés
237
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
11 juillet 2006
-
Messages postés
237
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
11 juillet 2006
-
voilà j'ai un problème avec un JTable.
J'ai créé mon propre modède de JTable paramètrable en fonction du nombre de colonnes. Seulement, lorsque je lance mon programme, il ne m'affiche que le titre de la dernière colonne.
cid019

6 réponses

Messages postés
68
Date d'inscription
mardi 2 mars 2004
Statut
Membre
Dernière intervention
10 mai 2007

Est-ce que ta table est affichée dans un JscrollPane ?

Sinon:

JScrollPane scrollPane = new JScrollPane(ta_JTable);

ton_JPanel.add(scrollPane);

En esperant que ce soit la solution à ton problème
Messages postés
500
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
11 juillet 2007

tu envoie des donnees ds la derniere colonne?
envoie ton bout de code de ta JTable perso,
on verra ce qui est possible...
-------------------
>:) dams >:)
-------------------
Messages postés
237
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
11 juillet 2006

Oui ma JTable est affichée dans un JScrollPane.
voila le code de Mon model (c'est assez long) :

class LignesModel extends AbstractTableModel
{
private Vector[] vc;
private String[] st;
private int nbcol;

public LignesModel(int nbc, String[] ch)
{
nbcol = nbc;
st = new String[nbcol];
vc = new Vector[nbcol];
for (int i = 0; i < nbcol; ++i)
{
st[i] = ch[i];
vc[i] = new Vector();
}
}

public void effacerTout()
{
for (int i = 0; i < nbcol; ++i)
vc[i].clear();
}

public void ajouterLigne(String[] ch)
{
for (int i = 0; i < nbcol; ++i)
vc[i].add(ch[i]);
}

public String[] getColonne(int index)
{
Vector[] vres;
vres = new Vector[nbcol];
for (int i = 0; i < nbcol; ++i)
if (i == index)
vres[i] = vc[i];
else
vres[i] = new Vector();

String[] res = new String[vres[index].size()];

for (int i = 0; i < vres[index].size(); ++i)
{
res[i] = (String)vres[index].get(i);
}

return res;
}

public int getColumnCount()
{
return nbcol;
}

public int getRowCount()
{
return vc[0].size();
}

public String getColumnName(int col)
{
String res;
res = new String("");
for (int i = 0; i < nbcol; ++i)
if (i == col)
res = st[i];
else
res = "";
return res;
}

public Object getValueAt(int parm1, int parm2)
{
Object obj;
obj = new Object();
for (int i = 0; i < nbcol; ++i)
if (i == parm2)
obj = vc[i].get(parm1);
else
obj = "";
return obj;
}

public boolean isCellEditable(int row, int col)
{
return true;
}
}

Donc le problème c'est, par exemple, que sur 5 colonnes rentrées en paramètres, il n'y a que le titre de la derniere colonnes qui s'affiche..

code d'appel et d'initialisation:

st = new String[13];
st[0] = "Bassin";
st[1] = "Station";
st[2] = "Département";
st[3] = "Commune";
st[4] = "Rivière";
st[5] = "PK";
st[6] = "Gestionnaire";
st[7] = "Cote";
st[8] = "Date";
st[9] = "Cote previs";
st[10] = "Date previs";
st[11] = "Debit";
st[12] = "Commentaires";
lignesModel = new LignesModel(13, st);
tblLignes = new JTable(lignesModel);
scrollPane = new JScrollPane(tblLignes);

temp.add(scrollPane, BorderLayout.CENTER);

Donc il y a juste "Commentaires" qui apparait sur la serniere colonne
voila

cid019
Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
8
Salut,

c'est plutôt logique en fait. :)
Ta méthode getColumnName ne fait pas ce que tu attends.
Tu affectes à une variable le nom de la colonne que tu souhaites mais tu continues ta boucle au lieu de t'arrêter. Ce qui fait pour pour toutes les colonnes autres que la dernière la valeur retournée est "".
De plus je vois pas pourquoi tu fais une boucle vu que tu as un tableau qui contient les noms des colonnes.

 public String getColumnName(int col)
{
return st[col];
}

C'est beaucoup plus simple
Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
8
au passage tu as le même problème un peu partout dans ton code.
J'ai corrigé un peu ton code

class LignesModel extends AbstractTableModel
{
private Vector[] vc;
private String[] st;
private int nbcol;

public LignesModel(int nbc, String[] ch)
{
nbcol = nbc;
st = new String[nbcol];
vc = new Vector[nbcol];
for (int i = 0; i < nbcol; ++i)
{
st[i] = ch[i];
vc[i] = new Vector();
}
}

public void effacerTout()
{
for (int i = 0; i < nbcol; ++i)
vc[i].clear();
}

public void ajouterLigne(String[] ch)
{
for (int i = 0; i < nbcol; ++i)
vc[i].add(ch[i]);
}

public String[] getColonne(int index)
{
return (String[]) vc[index].toArray(new String[vc.size()]); 
}

public int getColumnCount()
{
return nbcol;
}

public int getRowCount()
{
return vc[0].size();
}

public String getColumnName(int col)
{
return st[col];
}

public Object getValueAt(int parm1, int parm2)
{
return vc[parm2].get(parm1);
}

public boolean isCellEditable(int row, int col)
{
return true;
}
}
Messages postés
237
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
11 juillet 2006

Super!!!!!!!
Merci pour le coup de main, ca me fait bien avancer
encore merci
cid019