IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

sauvegarder un ArrayList


Sujet :

Collection et Stream Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Points : 35
    Points
    35
    Par défaut sauvegarder un ArrayList
    bonjour a tous
    je reviens encore une fois pour solliciter votre aide
    (je sais que je pose beaucoup de question , mais je vous promis que si un jour
    j arrive a maitriser le java, j essayerai d aider a mon tour . ..)
    pour résumer mon problème :
    j ai un tableau ArrayList<class1> al = new ArrayList<class1>(); dans le quel je met des instanses de class1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class class1 {
    int x ;
    string forme ;
    string parametre1 , parametre2 ;
    }
    et je voudrai les enregistrer dans fichier sur disque
    question :
    quel type de fichier je doit utilser .
    et comment les recuperer .
    voil ce que j ai fait pour les sauvgarder
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	try
    			{   oos = new ObjectOutputStream(
           				new BufferedOutputStream(
           						new FileOutputStream(
           								new File("D:objet.dat"))));
    			    for(int j= 0; j<al.size(); j++) {   oos.writeObject(al.get(j));}
     
    			   oos.close();
     
     
    			}
               catch (IOException e2){}
    mais le fichier objet.dat est vide
    j espère que j était clair , et je vous remercie d avance

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     catch (IOException e2){}
    commencez par afficher vos exceptions plutot que de les jeter par la fenêtre, elles servent à quelque chose!

    http://anisfrikha.developpez.com/tut...eptions/#LVI-A

  3. #3
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour,

    il y a probablement plusieurs raisons pour que le fichier reste déséspérement vide:
    * L'objet sérialisé fait peut être partie d'une classe pour laquelle vous avez oublié d'implémenter l'interface Serializable
    * Le chemin de fichier est probablement incompréhensible pour JAVAOù est le séparateur de fichier du genre "D:\...". A ce sujet, il est conseillé d'utiliser File.separator, qui diffère selon le système d'exploitation

    Bref, tout ceci trouverait sa solution si ( comme l'a fait remarqué Tchize ), il y avait la gestion des exceptions dans votre code

    @ bientôt...
    @ bientôt...

    Salut & @+ sur 3W!

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Points : 35
    Points
    35
    Par défaut
    pour commencer merci pour vos réponses
    pour les exception je voulais pas mettre tous le code .
    pour le chemin c "D://objet.dat" et j implémenter l interface Serializable .
    mais le problème j écris et récupérer le fichier, comment je fait pour avoir mes objet un par un sachant que j ai un tableau d objet (Arraylist).
    c la que je coince

  5. #5
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Dans tous les cas, il est inutile de créer une boucle pour écrire tes data dans le fichier. Il te suffit de faire un writeObject de ta List en s'assurant que ta classe 'Class1' implémente Serializable.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par billynirvana Voir le message
    Dans tous les cas, il est inutile de créer une boucle pour écrire tes data dans le fichier. Il te suffit de faire un writeObject de ta List en s'assurant que ta classe 'Class1' implémente Serializable.
    ok , merci (c'est ce que je me disais ....)
    mais ca me dit pas comment récupérer mes instance de class1 un par un pour les traiter ( ou avoir accès a mon premier objet de mon arrayList par exemple)
    juste une petite ligne de code pour me dire comment je vais parcourir mon objet(ArrayListe après l avoir récupérer) ,je n y arrive pas

  7. #7
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour,

    voici un bout de code du projet sur lequel je travaille actuellement.
    Voici un échantillon de la méthode gérant la sauvegarde des données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    try
    {
      oOutStream.writeInt( 1 ); // N° de version des données, c'est un int
     
      oOutStream.writeObject( GEMOC_Peri.litMdpAdmin()); // C'est une String
      oOutStream.writeObject( GEMOC_Peri.litMdpCompta()); // C'est une String
     
      // Listes adhérents:
      oOutStream.writeInt( ADH_dernier_id ); // C'est un int
     
      oOutStream.writeObject( listeAdhSD ); // C'est un ArrayList<CItemAdherent> ( Tableau dynamique de classes )
      oOutStream.writeObject( listeAdhJA ); // Idem ci-dessus
      oOutStream.writeObject( listeAdhReserve ); // Idem ci-dessus
     
      // Planning:
      oOutStream.writeObject( listeJoursPlanning ); // ArrayList<CJourPlanning> (Tableau dynamique de classes)
     
      // Pointage
      oOutStream.writeObject( listePointageSD ); // ArrayList<CPointageAdherent> (Tableau dynamique de classes)
      oOutStream.writeObject( listePointageJA ); // Idem ci-dessus
      oOutStream.writeObject( bilanMois ); // CBilanMois[] bilanMois (Tableau figé de classes)
     
    /.../
    Voici maintenant un échantillon de la méthode gérant la récupération des données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    try
    {
      ADH_dernier_id = oInpStream.readInt(); // N° de version des données
     
      sMotDePasseAdmin = (String)oInpStream.readObject();
      sMotDePasseCompta = (String)oInpStream.readObject();
     
      // Listes adhérents:
      ADH_dernier_id = oInpStream.readInt();
     
      listeAdhSD = (ArrayList<CItemAdherent>)oInpStream.readObject();
      listeAdhJA = (ArrayList<CItemAdherent>)oInpStream.readObject();
      listeAdhReserve = (ArrayList<CItemAdherent>)oInpStream.readObject();						
      // Planning:
      listeJoursPlanning = (ArrayList<CJourPlanning>)oInpStream.readObject();
     
      // Pointage
      listePointageSD = (ArrayList<CPointageAdherent>)oInpStream.readObject();
      listePointageJA = (ArrayList<CPointageAdherent>)oInpStream.readObject();
      bilanMois = (CBilanMois[])oInpStream.readObject();
    /.../
    ATTENTION: l'éditeur (ECLIPSE) ne garantissant pas l'adéquation entre les objets lus, et les types contenus dans les ArrayList, il donne un Warning qui indique que ceci est de la responsabilité du programmeur.
    Ce type d'avertissement peut être désactivé en mettant l'indication @SuppressWarnings("unchecked") avant la méthode de chargement des données.

    J'espère que cet exemple vous permettra d'avancer...
    @ bientôt...
    @ bientôt...

    Salut & @+ sur 3W!

  8. #8
    Nouveau membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 24
    Points : 25
    Points
    25
    Par défaut
    Ok petit résumé. L'ArrayList est une des implémentations de l'interface List. Un ArrayList est Serializable, n'importe quelle objet qui est Serializable peu être écrit dans un fichier ou envoyer sur le réseau par un socket. L'importance comme billynirvana dit est de t'assurer que tout les objets et propriéter/attribut de tes objets contenu dans ton ArrayList implémente l'interface Serializable. Par la suite tu n'as qu'a sauvegarder ton ArrayList et de lire ton ArrayList. Tu n'as par la suite qu'a utiliser tes données comme bon te semble.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    ArrayList<ClassA> al = new  ArrayList<ClassA>();
    al.add(new ClassA());
    al.add(new ClassA());
    try {
    File dataFile = new File("D\:objet.dat");
    ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(dataFile)));
    oos.writeObject(al);
    oos.close();
     
    ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(dataFile)));
    ArrayList<ClassA> objLu = (ArrayList<ClassA>)ois.readObject();
    ois.close();
     
    for (ClassA current : objLu) {
      System.out.printLn(current);
    }
    }
    catch (IOException e2){ e2.printStackTrace(); }
    Biensur si tu as sauvegarder un ArrayList dans le fichier. Il va falloir lire un ArrayList. Si tu sauvegarde chaque objet séparément dans ton fichier tu peux lire chaque objet séparément.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Points : 35
    Points
    35
    Par défaut
    Avec votre aide j ai réussi a sauvegarder mon ArrayList , et je peux le lire depuis le disque
    Alors voila ce qui j ai fait si ca intéresse quelqu’un :
    Pour la sauvegarde
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    if(e.getSource()==save) //bouton de sauvegarde   
    		    {
    //...............................................................................................			               
     
    			   try {
    		        	oos = new ObjectOutputStream(
    		        				new BufferedOutputStream(
    		        						new FileOutputStream(
    		        								new File("D://fichier.dat"))));
     
    		        	// écrire chaque objet 
    		        	 oos.writeObject(al);
    		        	// FERMER LE FLUX ! ! !
    		        	oos.close();
     
    			   }catch (FileNotFoundException ex) {ex.printStackTrace();} 
    		          catch (IOException ex) { ex.printStackTrace();}
    		   }
    Pour le restituer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    		   if(e.getSource()==restituer)//bouton de restitution 
    		   {   try {
     
     
            	//On récupère maintenant les données !
            	ois = new ObjectInputStream(
        				new BufferedInputStream(
        						new FileInputStream(
        								new File("D://fichier.dat"))));
     
            	try {  al =(ArrayList<Dee2>)ois.readObject();//Dee2 est la class1  
     
    			} catch (ClassNotFoundException ex) {ex.printStackTrace();}
    			ois.close();
     
            } catch (FileNotFoundException ex) {ex.printStackTrace();} 
              catch (IOException ex) { ex.printStackTrace();}
     
    for(int nb=0;nb<al.size();nb++){System.out.println(" "+al.get(nb).Figure);}
    //test d acces au variable de class(ca marche nikel)
     
    vrai =true ; repaint();// pour redessiner le panel avec les figure 
                           //stocker dans fichier.dat 
    		   }
    Mon but et de dessiner des figures dans un JPanel ,de les sauvegarder
    Et puis les restituer depuis fichier.dat mais quand j appuie sur le bouton
    Restituer,il ne reafiche pas les figures
    Voila le code de paintComponent :
    protected void paintComponent(Graphics g){
    super.paintComponent(g);
    if(vrai==true){

    for( i= 0; i<al.size(); i++)
    {
    if(al.get(i).Figure=="slc"){g.fillOval(al.get(i).x,al.get(i).y, 30, 30);}
    if(al.get(i).Figure=="prj"){g.fillRect(al.get(i).x,al.get(i).y, 30, 30);}
    }

    }
    }
    Vous aurai pas une idee sur ce qui coince
    Et encor merci pour toutes vos réponses.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Points : 35
    Points
    35
    Par défaut
    apres avoir recupere mon ficher(objet ArrayListe) avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ArrayList<Dee2> al =(ArrayList<Dee2>)ois.readObject();
    j essaye des dessiner aprtire de al :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    protected void paintComponent(Graphics g){
    		super.paintComponent(g);
     
    		g.fillOval(al.get(0).x,al.get(0).y, 30, 30);
    }
    eclips m affiche les erreurs suivante :

    Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.RangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at Panel.paintComponent(TheMain.java:60)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JComponent.paintToOffscreen(Unknown Source)
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
    at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
    at javax.swing.RepaintManager.paint(Unknown Source)
    at javax.swing.JComponent._paintImmediately(Unknown Source)
    at javax.swing.JComponent.paintImmediately(Unknown Source)
    at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
    at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
    at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
    at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

    et j arrive pas a régler le problème

  11. #11
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour,

    il semblerait que la taille de l'ArrayList soit nulle (size = 0 dans le traçage d'erreur).

    Votre code ne semble pas infaillible, par exemple, imaginons que la taille de l'ArrayList = 0.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for ( int nb = 0; nb < al.size() ;nb++ )
      System.out.println(" "+al.get(nb).Figure);
    }
    nb valant '0' à l'entrée de boucle, l'instruction à l'intérieur de celle-ci n'est pas effectuée, la sortie de boucle est immédiate puisqu'on a tout de suite la condition de fin de boucle.
    Le problème est que vous effectuez ensuite l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vrai =true ; 
    repaint();
    Ceci nous emmène dans la méthode de dessin du composant alors que l'ArrayList est vide !

    Il faudrait mettre "vrai = true;" dans la boucle pour détecter s'il y a réellement un élément dans la liste.

    Enfin je pense...

    @ bientôt...
    @ bientôt...

    Salut & @+ sur 3W!

  12. #12
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par rtg57 Voir le message
    Bonjour,

    il semblerait que la taille de l'ArrayList soit nulle (size = 0 dans le traçage d'erreur).

    Votre code ne semble pas infaillible, par exemple, imaginons que la taille de l'ArrayList = 0.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for ( int nb = 0; nb < al.size() ;nb++ )
      System.out.println(" "+al.get(nb).Figure);
    }
    nb valant '0' à l'entrée de boucle, l'instruction à l'intérieur de celle-ci n'est pas effectuée, la sortie de boucle est immédiate puisqu'on a tout de suite la condition de fin de boucle.
    Le problème est que vous effectuez ensuite l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vrai =true ; 
    repaint();
    Ceci nous emmène dans la méthode de dessin du composant alors que l'ArrayList est vide !

    Il faudrait mettre "vrai = true;" dans la boucle pour détecter s'il y a réellement un élément dans la liste.

    Enfin je pense...

    @ bientôt...
    justement pourqoui mon Arraylist est vide alors que j ai mon objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     al =(ArrayList<Dee2>)ois.readObject();
    mais j ai fait un boucle de test sur mon al
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int nb=0;nb<al.size();nb++){System.out.println("  "+al.get(nb).Figure);
    est il m'affiche exactement les figure que j ai sauvegarder ,cela juste on appuyons sur le bouton restituer
    meme chose dans la methode repaintComponet() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    protected void paintComponent(Graphics g){
    		super.paintComponent(g);
    		System.out.println("taille de al "+al.size());// affiche taille de al 8
    	if(vrai==true){	
     
     
    		for( i= 0; i<al.size(); i++)
    		{
    			if(al.get(i).Figure=="slc"){g.fillOval(al.get(i).x,al.get(i).y, 30, 30);}
    			if(al.get(i).Figure=="prj"){g.fillRect(al.get(i).x,al.get(i).y, 30, 30);}
    		}
     
    	}
    	}
    mais pas moyen de redissiner mes figure
    une petite idee sur ce qui ne va pas

  13. #13
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    donnez nous un code complet plutot que des petits bouts de deux ligne. On sais pas où il vont, comment ils s'organisent entre eux, etc.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    donnez nous un code complet plutot que des petits bouts de deux ligne. On sais pas où il vont, comment ils s'organisent entre eux, etc.
    ok , voici le code complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
     
    import javax.swing.*;
    import java.util.ArrayList;
    import java.awt.event.*;
    import java.awt.*;
    import java.io.*;
     
    public class TheMain {
     
    	public static void main(String[] args) {
    		frame	f =	 new frame();
     		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     		f.setVisible(true);	
        }
    }
    //***********************************************************************
    class frame extends JFrame {
    	public frame(){
    		setSize(600,600);
    		Panel p = new Panel();
    		setContentPane(p);
    	}
    }
    //************************************************************************
    class Panel extends JPanel implements ActionListener,Serializable{
     
    	ArrayList<Dee2> al = new ArrayList<Dee2>();
    int i=0;
     
    	JButton b1 = new JButton("selc");
    	JButton b2 = new JButton("proj");
    	JButton b3 = new JButton("save");
    	JButton b5 = new JButton("restituer");
     
    	ObjectInputStream ois;
        ObjectOutputStream oos;
        Boolean vrai = false;
     
    	int x1=50,y1=50;
    	public Panel()
    	{
    		setBackground(Color.white);
    		add(b1);
    		add(b2);
    		add(b3);
     
    		add(b5);
    		b1.addActionListener(this);
    		b2.addActionListener(this);
    		b3.addActionListener(this);
    		b5.addActionListener(this);
    	}
     
    //****************class pour sauvgarder les figure*****************************	
     
     
    	protected void paintComponent(Graphics g){
    		super.paintComponent(g);
    		System.out.println("taille de al = "+al.size());//test de la taille de al
    	if(vrai==true){	
     
     
    		for( i= 0; i<al.size(); i++)
    		{
    			if(al.get(i).Figure=="slc"){g.fillOval(al.get(i).x,al.get(i).y, 30, 30);}
    			if(al.get(i).Figure=="prj"){g.fillRect(al.get(i).x,al.get(i).y, 30, 30);}
    		}
     
    	}
    	}
    	public void actionPerformed(ActionEvent e){
    		   if(e.getSource()==b1)
    		   { Dee2 d = new Dee2();
    		     d.Figure="slc";
    			 d.x=x1;
    			 d.y=y1;
    			 al.add(d);
    			 vrai=true;
    			 repaint();x1=x1+50;
    			 if(x1>500){x1=50;y1=y1+50;}
    		   }
    		   if(e.getSource()==b2)
    		   { Dee2 d = new Dee2();
    		     d.Figure="prj";
    			 d.x=x1;
    			 d.y=y1;
    			 al.add(d);
    			 vrai=true;
    			 repaint();x1=x1+50;
    			 if(x1>500){x1=50;y1=y1+50;}
    		   }
     
    //****************************************************************************
    		   if(e.getSource()==b5)
    		   {   try {
     
     
            	//On récupère maintenant les données !
            	ois = new ObjectInputStream(
        				new BufferedInputStream(
        						new FileInputStream(
        								new File("D://jsk.dat"))));
     
            	try {  al =(ArrayList<Dee2>)ois.readObject();
     
    			} catch (ClassNotFoundException ex) {ex.printStackTrace();}
    			ois.close();
     
            } catch (FileNotFoundException ex) {ex.printStackTrace();} 
              catch (IOException ex) { ex.printStackTrace();}
     
    		for(int nb=0;nb<al.size();nb++){System.out.println("  "+al.get(nb).Figure);
    		}
     
    			vrai =true ; repaint();
    		   }
    //************************************************************************		   
    		   if(e.getSource()==b3)
    		    {
    //...............................................................................................			               
     
    			   try {
    		        	oos = new ObjectOutputStream(
    		        				new BufferedOutputStream(
    		        						new FileOutputStream(
    		        								new File("D://jsk.dat"))));
     
    		        	// écrire chaque objet 
    		        	 oos.writeObject(al);
    		        	// FERMER LE FLUX ! ! !
    		        	oos.close();
     
    			   }catch (FileNotFoundException ex) {ex.printStackTrace();} 
    		          catch (IOException ex) { ex.printStackTrace();}
    		   }
    //............................................................................................   
     
    	}
    }

    et voici ma class Dee2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    import java.io.*;
    class Dee2 implements Serializable 
    	{
    		int x,y;
    		String Figure ;
    	}

  15. #15
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    				if (al.get(i).Figure == "slc") {
    					g.fillOval(al.get(i).x, al.get(i).y, 30, 30);
    				}
    				if (al.get(i).Figure == "prj") {
    					g.fillRect(al.get(i).x, al.get(i).y, 30, 30);
    				}
    Ton erreur est là...

  16. #16
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par billynirvana Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    				if (al.get(i).Figure == "slc") {
    					g.fillOval(al.get(i).x, al.get(i).y, 30, 30);
    				}
    				if (al.get(i).Figure == "prj") {
    					g.fillRect(al.get(i).x, al.get(i).y, 30, 30);
    				}
    Ton erreur est là...
    pourriez vous me donner un peu plus de détailles ,
    merci

  17. #17
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 76
    Points : 35
    Points
    35
    Par défaut
    en faite j ai régler le problème j ai remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if(al.get(i).Figure=="slc"){g.fillOval(al.get(i).x, al.get(i).y, 30, 30);}
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if(al.get(i).Figure.equals("slc")){g.fillOval(al.get(i).x, al.get(i).y, 30, 30);}
    encore merci a tous pour vos réponse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ArrayList problème de sauvegarde
    Par Razorbak dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 06/11/2012, 20h20
  2. [C#] Sauvegarder une ArrayList en Settings
    Par xtream dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/06/2006, 15h09
  3. [ADO] Sauvegarde / lecture de recordset
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 20/09/2002, 16h54
  4. Sauvegarder une surface dans un fichier
    Par Freakazoid dans le forum DirectX
    Réponses: 6
    Dernier message: 18/08/2002, 15h23
  5. [Kylix] Sauvegarde de donnée utilisateur....
    Par Eclypse dans le forum EDI
    Réponses: 1
    Dernier message: 11/05/2002, 17h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo