[serialisation] JTABLE pb [Résolu]

Messages postés
78
Date d'inscription
mardi 8 juin 2004
Dernière intervention
10 août 2005
- 19 juil. 2004 à 13:25 - Dernière réponse :
Messages postés
78
Date d'inscription
mardi 8 juin 2004
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);

}

}
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
78
Date d'inscription
mardi 8 juin 2004
Dernière intervention
10 août 2005
- 20 juil. 2004 à 09:44
3
Merci
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

Merci bidani 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de bidani
Messages postés
649
Date d'inscription
mardi 8 juin 2004
Dernière intervention
9 septembre 2004
- 19 juil. 2004 à 13:44
0
Merci
c quoi le message quand il plante?
Commenter la réponse de wargre
Messages postés
78
Date d'inscription
mardi 8 juin 2004
Dernière intervention
10 août 2005
- 19 juil. 2004 à 13:56
0
Merci
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);
Commenter la réponse de bidani
Messages postés
649
Date d'inscription
mardi 8 juin 2004
Dernière intervention
9 septembre 2004
- 19 juil. 2004 à 14:07
0
Merci
Met un TableModel ca devrait le calmer
Commenter la réponse de wargre
Messages postés
78
Date d'inscription
mardi 8 juin 2004
Dernière intervention
10 août 2005
- 19 juil. 2004 à 14:17
0
Merci
il dit que c abstract et que je ne peux pas l'instancier !!!!!!!
Commenter la réponse de bidani
Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
- 19 juil. 2004 à 16:35
0
Merci
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)
Commenter la réponse de cs_GodConan
Messages postés
78
Date d'inscription
mardi 8 juin 2004
Dernière intervention
10 août 2005
- 20 juil. 2004 à 08:44
0
Merci
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...........
Commenter la réponse de bidani
Messages postés
649
Date d'inscription
mardi 8 juin 2004
Dernière intervention
9 septembre 2004
- 20 juil. 2004 à 09:42
0
Merci
tu fait l'inverse: quand quelqu'un appuis sur valider, tu degages le curseur de la cellule (si il y en a un)
Commenter la réponse de wargre

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.