JTable

maudinina Messages postés 4 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 29 août 2003 - 28 août 2003 à 12:17
sagent2 Messages postés 2 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 13 juillet 2005 - 13 juil. 2005 à 20:37
Bonjour,
J'essaie de creer une JTable mais je ne connais pas encore le nombre de lignes que je vais devoir inserer. Comment puis je faire pour creer cette table sans etre obligee de specifier les dimensions du tableau de donnees (String[][]) ?
Je vous remercie !
-- Maudinina.

5 réponses

benohite Messages postés 210 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 18 décembre 2003 7
28 août 2003 à 12:55
bonjour,

as tu essayé:
Objet[][] donnee = new Object[0][0];
ou alors
Object[][] donnees = null;
tu peux tres bien creer ton tableau de donnees en lui specifiant un certain nombre de ligne et colonne mais sans l initialiser
ainsi qd tu connaitra le nombre de lignes il te suffira de le reconstruire

benohite
:big)
0
maudinina Messages postés 4 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 29 août 2003
28 août 2003 à 14:39
en fait, je ne peux pas savoir le nombre de lignes que j'aurai dans ma table....
elle se remplit ligne par ligne et le nombre dépend de ce que l'utilisateur veut saisir...
je voudrais un JTable que l'on puisse remplir sans contrainte de taille....

voila un test que j'ai voulu faire :

public class BoxTest extends JFrame {

JTable table = new JTable();

public BoxTest() {

...
JButton ok = new JButton("ok");
ok.addActionListener(new ListenerBox(this));
String[] dataRow = new String[1];
dataRow[0] = "un";
((DefaultTableModel)table.getModel()).addRow(dataRow);

Container boxAll = Box.createVerticalBox();

boxAll.add(Box.createVerticalStrut(10));
boxAll.add(table);
boxAll.add(Box.createVerticalStrut(10));
boxAll.add(ok);

getContentPane().add(boxAll);
}

class ListenerBox implements ActionListener {

BoxTest box;

public ListenerBox(BoxTest b) {
box = b;
}

public void actionPerformed(ActionEvent e) {
String[] dataRow = new String[1];
dataRow[0] = "deux";
((DefaultTableModel)box.table.getModel()).addRow(dataRow);
box.repaint();

}

}

public static void main(String[] args) {
BoxTest BT = new BoxTest();
BT.show();
}

}

ma table ne s'affiche pas....
0
benohite Messages postés 210 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 18 décembre 2003 7
29 août 2003 à 09:50
en fait tu peux utiliser des vecteurs au lieu d un tableau d objet pour les donnees de ta jtable
l avantage est que tu peux incrementer un vecteur comme tu veux, l inconvenient est que tu pers le type de la donnees que tu y met et donc tu es "oblige" d y mettre les meme donnees pour pouvoir faire un casting simple
mais treve de blabla voici un pitit exemple:
en fait j ai un peu remanié ton code

import javax.swing.*;
import java.awt.event.*;
import java.util.Vector;

public class BoxTest extends JFrame implements ActionListener 
{

private JTable table;
private Vector ligne;

public BoxTest() 
{
//vecteur contenant les noms de colonnes
Vector colonne = new Vector();
colonne.add(new String("colonne1"));
//vecteur de vecteur qui contient les donnes de ligne
ligne = new Vector();
//donnees de la ligne1
Vector ligne1 = new Vector();
String dataRow = new String("un");
ligne1.add(dataRow);
ligne.add(ligne1);

JButton ok = new JButton("ok");
ok.addActionListener(this);

table = new JTable(ligne,colonne);
//((DefaultTableModel)table.getModel()).addRow(dataRow); 

Box boxAll = new Box(BoxLayout.Y_AXIS);
boxAll.add(ok);

getContentPane().add("South",boxAll);
getContentPane().add("Center",table);

}

public void actionPerformed(ActionEvent e) 
{
Vector ligne2 = new Vector();
ligne2.add(new String("deux"));
ligne.add(ligne2);
//((DefaultTableModel)table.getModel()).addRow(dataRow);
repaint();

}

public static void main(String[] args) 
{
BoxTest BT = new BoxTest();
BT.show();
BT.setSize(800,600);
}

}


benohite
:big)
0
maudinina Messages postés 4 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 29 août 2003
29 août 2003 à 10:52
je n'avais pas pensé aux vecteurs ! tres bonne idée !!!
j'ai trouve un autre moyen entre temps mais merci beaucoup pour ton aide !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sagent2 Messages postés 2 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 13 juillet 2005
13 juil. 2005 à 20:37
bonjour je m'appelle jamal aarif je vais te repondre sur ta question concernat JTable.pour ne pas etre obligé chaque fois de specifier les nombre de ligne tu tu dois travailler avec la class Vector au lieu de String[] car les vectors sont dynamique.tu vas declarer ta class model comme ca .
import java.util.*;
import javax.swing.table.*;

class FileTableModel
extends AbstractTableModel {

private String[] columnNames; //noms de colonnes
private Vector data;
public FileTableModel(Vector tab1, String[] clumnName) {
data = tab1;
columnNames = clumnName;
}
public void viderData(){
data.clear();
fireTableDataChanged();
}
public int getColumnCount() {
return columnNames.length;
}

public int getRowCount() {
return data.size() / getColumnCount();
}

public void setVectorDataValue(Vector data1) {
data = data1;
fireTableDataChanged();
}

public String getColumnName(int columnIndex) {
String colName = "";
if (columnIndex <= getColumnCount())
colName = (String) columnNames[columnIndex];
return colName;
}
public void supprimerCelleValue(int rowIndex){
int indexdebu = rowIndex * getColumnCount();
data.removeElementAt( indexdebu);
fireTableDataChanged();
}
public void AjouterData(Object aValue){
data.add(aValue);
fireTableDataChanged();
}

public Vector getdata() {
return data;
}

public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}

public Object getValueAt(int rowIndex, int columnIndex) {
String d = (String) data.elementAt(rowIndex * getColumnCount() +
columnIndex);

return d;
}
public Vector getSelectedValues(int rowIndex)
{ Vector value= new Vector();
int coulumnNember = getColumnCount();
int indexdebu = rowIndex * getColumnCount();
for (int i = indexdebu ; i <=indexdebu+( coulumnNember-1); i++)
value.add( (String)data.elementAt(i));
return value;

}
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
data.add( (rowIndex * getColumnCount()) + columnIndex, aValue);


}
public void afficher() {
for (int i = 0; i < data.size(); i++)
System.out.println(data.elementAt(i));
}


}
0
Rejoignez-nous