[serialisation] JTABLE pb

Résolu
bidani Messages postés 78 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 10 août 2005 - 19 juil. 2004 à 13:25
bidani Messages postés 78 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 10 août 2005 - 20 juil. 2004 à 09:44
salut,
j'arrive a serialiser une jtable mais le petit probleme suibvant apparait :

(la serialisation marche si je rajoute ou supprime des lignes sans les editer)
ça plante quand j'edite une ligne et sauvegarder juste aprés
mais quand j'edite une ligne et avant de sauvegarder j'en supprime une autre ça fonctionne
etant debutant en java et 1ere utilisation de JTABLE je ne sais pas que ce qu'il, faut faire pour prendre en compte l'edition des champs

si vous voyez ce qu'il faut faire faites moi en part
MERCI...

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

import java.util.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.TitledBorder;
import java.text.*;
import javax.swing.table.*;

public class Test extends JFrame implements Serializable
{

public JTable table;
JPanel pann = new JPanel(new GridLayout(0,1));
JPanel gestion = new JPanel(new GridLayout(1,3));
public DefaultTableModel model;

public Test()
{

JButton Ajouter = new JButton("Ajouter");
JButton Supprimer = new JButton("Supprimer");
JButton Valider = new JButton("Valider");
pann.setPreferredSize(new Dimension(500, 500));

try {
File file = new File("sauve.tmp");
//deserialisation
if(file.exists() ) {
FileInputStream fis = new FileInputStream("sauve.tmp");
ObjectInputStream ois = new ObjectInputStream(fis);
table = new JTable();
model = (DefaultTableModel) ois.readObject();
table.setModel(model);

ois.close();
} else {

model = new DefaultTableModel(0,1);
table = new JTable();
table.setModel(model);

}

}catch(Exception e)
{
e.printStackTrace();
}

pann.add(table);
getContentPane().add("Center",pann);
gestion.add(Ajouter);
gestion.add(Supprimer);
gestion.add(Valider);
setSize(600,400);
getContentPane().add("South",gestion);
table.setPreferredScrollableViewportSize(new Dimension(500, 400));

addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{
//System.exit(0);
setVisible(false);
}
});

Ajouter.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
ajouter_actionPerformed(e);

}
});

Supprimer.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
supprimer_actionPerformed(e);
}

});

Valider.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
sauve_actionPerformed(e);
// System.exit(0);
setVisible(false);

}
});
}

public void supprimer_actionPerformed(ActionEvent e){

int [] selected = table.getSelectedRows();
for (int i = selected.length - 1; i >= 0; i--)
model.removeRow(selected[i]);
}

public void ajouter_actionPerformed(ActionEvent e){

/* Integer[] newCells = new Integer[model.getColumnCount()];
for (int i = 0; i < newCells.length; i++)
newCells[i] = new Integer((i + 1)
* (model.getRowCount() + 1));
model.addRow(newCells);*/
String [] data = new String [model.getColumnCount()];
data[0] = "http://";
model.addRow(data);
}

public void sauve_actionPerformed(ActionEvent e) {

try {
//Serialisation
FileOutputStream fos = new FileOutputStream("sauve.tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(model);
oos.close();
System.exit(0);
} catch (IOException e1) {
e1.printStackTrace();
}
}

public static void main(String[] args)
{
Test test = new Test();
test.pack();
test.setVisible(true);

}

}

8 réponses

bidani Messages postés 78 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 10 août 2005
20 juil. 2004 à 09:44
salut pour ce qui on le meme problme que moi voila la solution*

avant de serialiser il faut faire

if(table.isEditing()){
if (table.getCellEditor() != null) {
table.getCellEditor().stopCellEditing();
}
}

voila
3
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
19 juil. 2004 à 13:44
c quoi le message quand il plante?
0
bidani Messages postés 78 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 10 août 2005
19 juil. 2004 à 13:56
c'est :

noserializable Exception...reflect constructor et apparement il n'aime pas l'initialisation de mon model

File file = new File("sauve.tmp");
//deserialisation
if(file.exists() ) {
FileInputStream fis = new FileInputStream("sauve.tmp");
ObjectInputStream ois = new ObjectInputStream(fis);
table = new JTable();
model = (DefaultTableModel) ois.readObject();//ICI!!!!!!!!!!!
table.setModel(model);
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
19 juil. 2004 à 14:07
Met un TableModel ca devrait le calmer
0

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

Posez votre question
bidani Messages postés 78 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 10 août 2005
19 juil. 2004 à 14:17
il dit que c abstract et que je ne peux pas l'instancier !!!!!!!
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
19 juil. 2004 à 16:35
En fait il n est pas tres judicieu de serializer un model ... ;o)
Utilise plutot la methode getData() pour en obtenir les données et ce sont les données que tu doit sérializer (enfin sauvegarder à l aide de la serialization ;o) héhé)
ensuite il ne te restera plus qu a rempliur ta table avec les donnee obtenu ...

Le gro prob qd tu write une class que tu ne conne pas bien ... c que tu ne peu pas tro predir le comportement de chacun de ses attribut ... certain peuvent etre "Transient " et ds ce cqs tu ne pourra en restituer la valeur par la serialization .... dc evite la serialization sur des class tro complex.... ;o) ...

++

GodConan :clown)
0
bidani Messages postés 78 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 10 août 2005
20 juil. 2004 à 08:44
en fait j'ai compris maintenant qu'il faut juste appuyer sur le ENTREE avant de Validez(il suffit d'enlever le curseur de la jtable avant de valider) pour que ça marche maintenant ce que je veux c un moyen d'empecher les utilisateur d'appuyez sur le bouton Validez tant que le curseur est dans une cellule de la Jtable?????????

quelqu'un sait comment on fait???

MERCI...........
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
20 juil. 2004 à 09:42
tu fait l'inverse: quand quelqu'un appuis sur valider, tu degages le curseur de la cellule (si il y en a un)
0
Rejoignez-nous