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

Java Discussion :

[Stratégie] Sauvegarde de programme


Sujet :

Java

  1. #1
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Par défaut [Stratégie] Sauvegarde de programme
    Bonjour,

    J'ai un programme dans le quel l'utilisateur voudrais pouvoir sauvegarder sa "session", c'est a dire l'etat du programme au moment de la fermeture ...

    Déjà est ce réaliste tel quel ? si oui je ne suis pas sure de comment proceder ...

    si je sauvegarde avec la serialisation ma classe principal toute les autres classes seront tel sauvegardé ? Est ce que je prend ca par le bon bout ?

    j'avoue ne pas savoir vers où me tourner ...

  2. #2
    Membre expérimenté Avatar de hydraland
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut
    Salut,

    Je te conseillerai de faire une classe dédié à ta sauvegarde et qui contiendrai uniquement les infos que tu souhaites sauvegarder. Ensuite tu la sérialises(cf FAQ http://ydisanto.developpez.com/tutor...ation/partie1/).

    A+
    Hydraland

  3. #3
    Membre Expert
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Par défaut
    Lady,

    J'ai realise une telle application.

    Pour se faire en fait j'ai utilise des .properties qui sont facile d'acces et tu peux gerer facilement tes configurations.

    Bon pour la serialisation se que je fais a chaque fois qui n'est peut etre pas la bonne methode lol mais je fais :
    public static final long serialVersionUID=42L;

    Voilà apres je ne sais pas si tente est que tu es des questions

  4. #4
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Par défaut
    Alors la serialisation ca va (ou moi aussi je fait 42L) ...

    bon par contre je veux vraiment tout sauvegarder .. jusqu'a la position de mes JInternalFrame ... C'est vraiment dans le scénario : l'utilisateur ferme le programme le soir et le rouvre le lendemain matin pour continuer son travail ...

  5. #5
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Par défaut
    ohoh j'ai un problème .

    J'ai essayer la manière barbare (sauvegarde de la classe principale)

    alors ca sauvegarde mais au moment de charger :

    java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.jdesktop.layout.GroupLayout

    je suis dans la *$$*$* si GroupLayout n'est pas serializable ! (quelqu'un utilse netbeans pour générer ses interfaces ?)

  6. #6
    Membre Expert
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Par défaut
    Et bien tu sauvegardes tes positions de tes jinternalframe dans un .properties et tu les affiches en consultant le fichier de sauvegarde à la propriete voulu.
    Soit ainsi tu as d'origine une configuration de position des fenetres qui sera modifier automatiquement et sauvegarder.

    Tu comprends ?

    Regarde les properties si tu ne vois ou si tu souhaites je te donnerais un bout de code d'acces aux valeurs des properties

  7. #7
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Par défaut
    Citation Envoyé par X-plode
    Et bien tu sauvegardes tes positions de tes jinternalframe dans un .properties et tu les affiches en consultant le fichier de sauvegarde à la propriete voulu.
    Soit ainsi tu as d'origine une configuration de position des fenetres qui sera modifier automatiquement et sauvegarder.

    Tu comprends ?

    Regarde les properties si tu ne vois ou si tu souhaites je te donnerais un bout de code d'acces aux valeurs des properties
    oué je vois ... en fait c'est just que j'ai tellement de truc dans ses internal frame que je sais pas quoi sauvegarder si ce n'est tout ... hors visiblement je peut pas car j'ai utilisé des objet non serializable dont je n'ai pas le code source ... a lalala bon je vais me cassé la tête du coup lol

  8. #8
    Membre Expert
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Par défaut
    Lol ecoute se que tu peux faire c mettre ton code en piece jointe et je regarde. Sinon tu peux me l'envoyer.

  9. #9
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Tu peux sérialiser avec XStream... Pas besoin d'implémenter Serializable

    Citation Envoyé par Javadoc de JFrame (par exemple)
    Warning: Serialized objects of this class will not be compatible with future Swing releases. The current serialization support is appropriate for short term storage or RMI between applications running the same version of Swing. As of 1.4, support for long term storage of all JavaBeansTM has been added to the java.beans package. Please see XMLEncoder.

  10. #10
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Par défaut
    bon je vais regarder XStream mais ma JFrame sans encore d'internal faisans 8mo un fois sauver .... c'est ptet pas une bonne idée de TOUT sauver ...

    Je vais essayer avec un fichier proprieties (je viens d'avoir une idée ...)

    je veut bien un bout de code pour m'inspirer

  11. #11
    Membre Expert
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Par défaut
    Voici un peu de code pour t'aider voir meme se qu'il faut faire simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    prop = new Properties(); // Instanciation pour de la classe Properties pour  
                                         accès au données sauvegardées config
     
     
    //Lecture dans le fichier config.properties
    FileInputStream in = new FileInputStream("config.properties");		
    prop.load(in);
    in.close();
     
    //Ici on recupere valeur simplement 
    if(prop.getProperty("mode").equals("saisieListe")) saisieListe();
    En esperant que cela puisse t'aider

  12. #12
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Preferences est un peu mieux que Properties... (Properties, qui date de Java 1.0, hérite de Hashtable (n'imp)...)

  13. #13
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Par défaut
    merci vous deux j'essaye ^^

    alors visiblement fo que je mette tout en string ....

    Je vois comment faire pour tout sauf une classe qui recois une hashMap comment faire de cette hasmpa quelque chose que l'on peut mettre dans les properties ?

  14. #14
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Une méthode pour "connecter" une JFrame a des Preferences (position, largeur, hauteur, état) :

    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
    	/**
             * Bind {@link Preferences} to {@link JFrame}.
             * By default the frame will be placed on screen center
             * and given default values if no corresponding preferences are found.
             * 
             * @param prefs The {@link Preferences} to use.
             * @param frame The {@link JFrame}.
             * @param identifier The unique identifier (optional).
             * @param defaultWidth The default width to use if no pref found.
             * @param defaultHeight The default height to use if no pref found.
             * @param defaultState The default extended state to use if no pref found.
             */
    	public static void bind(
    			final Preferences prefs,
    			final JFrame frame,
    			final String identifier,
    			final int defaultWidth,
    			final int defaultHeight,
    			final int defaultState) {
    		// - keys
    		final String keyWidth = buildKey(KEY_FRAME_WIDTH, identifier);
    		final String keyHeight = buildKey(KEY_FRAME_HEIGHT, identifier);
    		final String keyLocationX = buildKey(KEY_FRAME_LOCATION_X, identifier);
    		final String keyLocationY = buildKey(KEY_FRAME_LOCATION_Y, identifier);
    		final String keyExtendedState = buildKey(KEY_FRAME_EXTENDED_STATE, identifier);
    		// - set values
    		frame.setSize(prefs.getInt(keyWidth, defaultWidth), prefs.getInt(keyHeight, defaultHeight));
    		if (prefs.getInt(keyLocationX, -1) < 0 || prefs.getInt(keyLocationY, -1) < 0) {
    			locateOnScreen(frame);
    		} else {
    			locateOnScreen(frame, prefs.getInt(keyLocationX, 1), prefs.getInt(keyLocationY, 1));
    		}
    		frame.setExtendedState(prefs.getInt(keyExtendedState, defaultState));
    		// - bind values
    		frame.addWindowListener(new WindowAdapter() {
    			@Override
    			public void windowOpened(WindowEvent e) {
    				frame.setExtendedState(prefs.getInt(keyExtendedState, defaultState));
    			}
    			@Override
    			public void windowClosing(WindowEvent e) {
    				try {
    					prefs.flush();
    				} catch (BackingStoreException e1) {
    					s_logger.warn("Cannot flush Preferences", e1);
    				}
    			}
    			@Override
    			public void windowStateChanged(WindowEvent e) {
    				prefs.putInt(keyExtendedState, frame.getExtendedState());
    			}
    		});
    		frame.addComponentListener(new ComponentListener() {
    			public void componentHidden(ComponentEvent e) { }
    			public void componentMoved(ComponentEvent e) {
    				prefs.putInt(keyExtendedState, frame.getExtendedState());
    				if ((frame.getExtendedState() & JFrame.MAXIMIZED_BOTH) != JFrame.MAXIMIZED_BOTH) {
    					prefs.putInt(keyLocationX, e.getComponent().getX());
    					prefs.putInt(keyLocationY, e.getComponent().getY());
    				}
    			}
    			public void componentResized(ComponentEvent e) {
    				prefs.putInt(keyExtendedState, frame.getExtendedState());
    				if ((frame.getExtendedState() & JFrame.MAXIMIZED_BOTH) != JFrame.MAXIMIZED_BOTH) {
    					prefs.putInt(keyWidth, e.getComponent().getWidth());
    					prefs.putInt(keyHeight, e.getComponent().getHeight());
    				}
    			}
    			public void componentShown(ComponentEvent e) { }
    		});
    		InputMap inputMap = frame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    		inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_D, KeyEvent.CTRL_DOWN_MASK), "deleteParams");
    		frame.getRootPane().getActionMap().put("deleteParams", new AbstractAction("deleteParams") {
    			public void actionPerformed(ActionEvent e) {
    				try {
    					prefs.clear();
    				} catch (BackingStoreException e1) {
    					s_logger.warn("Cannot clear Preferences", e1);
    				}
    			}
    		});
    	}
     
        /**
         * Locates the window on the screen center.
         */
        public static void locateOnScreen(Window window) {
            Dimension paneSize   = window.getSize();
            Dimension screenSize = window.getToolkit().getScreenSize();
            window.setLocation(
                (screenSize.width - paneSize.width) / 2,
                (screenSize.height - paneSize.height) / 2);
        }
     
        /**
         * Locates the given component at (x,y)
         * @param component
         * @param x absisse coin sup gauche (si null --> centré)
         * @param y ordonnée coin sup gauche (si null --> centré)
         */
        public static void locateOnScreen(Component component, Integer x, Integer y) {
            Dimension paneSize = component.getSize();
            Dimension screenSize = component.getToolkit().getScreenSize();
            component.setLocation((x != null) ? x : (screenSize.width - paneSize.width) / 2,
                                  (y != null) ? y : (screenSize.height - paneSize.height) / 2);
        }
    Ca fait beaucoup mais ça marche bien

    Pour chercher les Preferences dans la classe de la Frame par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Preferences prefs = Preferences.userNodeForPackage(this.getClass())
    Par défaut sous Windows ça ira dans la base de registre à moins de changer l'implémentation de Preferences utilisée.

  15. #15
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Par défaut
    Citation Envoyé par natha
    Une méthode pour "connecter" une JFrame a des Preferences (position, largeur, hauteur, état) :

    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
    	/**
             * Bind {@link Preferences} to {@link JFrame}.
             * By default the frame will be placed on screen center
             * and given default values if no corresponding preferences are found.
             * 
             * @param prefs The {@link Preferences} to use.
             * @param frame The {@link JFrame}.
             * @param identifier The unique identifier (optional).
             * @param defaultWidth The default width to use if no pref found.
             * @param defaultHeight The default height to use if no pref found.
             * @param defaultState The default extended state to use if no pref found.
             */
    	public static void bind(
    			final Preferences prefs,
    			final JFrame frame,
    			final String identifier,
    			final int defaultWidth,
    			final int defaultHeight,
    			final int defaultState) {
    		// - keys
    		final String keyWidth = buildKey(KEY_FRAME_WIDTH, identifier);
    		final String keyHeight = buildKey(KEY_FRAME_HEIGHT, identifier);
    		final String keyLocationX = buildKey(KEY_FRAME_LOCATION_X, identifier);
    		final String keyLocationY = buildKey(KEY_FRAME_LOCATION_Y, identifier);
    		final String keyExtendedState = buildKey(KEY_FRAME_EXTENDED_STATE, identifier);
    		// - set values
    		frame.setSize(prefs.getInt(keyWidth, defaultWidth), prefs.getInt(keyHeight, defaultHeight));
    		if (prefs.getInt(keyLocationX, -1) < 0 || prefs.getInt(keyLocationY, -1) < 0) {
    			locateOnScreen(frame);
    		} else {
    			locateOnScreen(frame, prefs.getInt(keyLocationX, 1), prefs.getInt(keyLocationY, 1));
    		}
    		frame.setExtendedState(prefs.getInt(keyExtendedState, defaultState));
    		// - bind values
    		frame.addWindowListener(new WindowAdapter() {
    			@Override
    			public void windowOpened(WindowEvent e) {
    				frame.setExtendedState(prefs.getInt(keyExtendedState, defaultState));
    			}
    			@Override
    			public void windowClosing(WindowEvent e) {
    				try {
    					prefs.flush();
    				} catch (BackingStoreException e1) {
    					s_logger.warn("Cannot flush Preferences", e1);
    				}
    			}
    			@Override
    			public void windowStateChanged(WindowEvent e) {
    				prefs.putInt(keyExtendedState, frame.getExtendedState());
    			}
    		});
    		frame.addComponentListener(new ComponentListener() {
    			public void componentHidden(ComponentEvent e) { }
    			public void componentMoved(ComponentEvent e) {
    				prefs.putInt(keyExtendedState, frame.getExtendedState());
    				if ((frame.getExtendedState() & JFrame.MAXIMIZED_BOTH) != JFrame.MAXIMIZED_BOTH) {
    					prefs.putInt(keyLocationX, e.getComponent().getX());
    					prefs.putInt(keyLocationY, e.getComponent().getY());
    				}
    			}
    			public void componentResized(ComponentEvent e) {
    				prefs.putInt(keyExtendedState, frame.getExtendedState());
    				if ((frame.getExtendedState() & JFrame.MAXIMIZED_BOTH) != JFrame.MAXIMIZED_BOTH) {
    					prefs.putInt(keyWidth, e.getComponent().getWidth());
    					prefs.putInt(keyHeight, e.getComponent().getHeight());
    				}
    			}
    			public void componentShown(ComponentEvent e) { }
    		});
    		InputMap inputMap = frame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    		inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_D, KeyEvent.CTRL_DOWN_MASK), "deleteParams");
    		frame.getRootPane().getActionMap().put("deleteParams", new AbstractAction("deleteParams") {
    			public void actionPerformed(ActionEvent e) {
    				try {
    					prefs.clear();
    				} catch (BackingStoreException e1) {
    					s_logger.warn("Cannot clear Preferences", e1);
    				}
    			}
    		});
    	}
     
        /**
         * Locates the window on the screen center.
         */
        public static void locateOnScreen(Window window) {
            Dimension paneSize   = window.getSize();
            Dimension screenSize = window.getToolkit().getScreenSize();
            window.setLocation(
                (screenSize.width - paneSize.width) / 2,
                (screenSize.height - paneSize.height) / 2);
        }
     
        /**
         * Locates the given component at (x,y)
         * @param component
         * @param x absisse coin sup gauche (si null --> centré)
         * @param y ordonnée coin sup gauche (si null --> centré)
         */
        public static void locateOnScreen(Component component, Integer x, Integer y) {
            Dimension paneSize = component.getSize();
            Dimension screenSize = component.getToolkit().getScreenSize();
            component.setLocation((x != null) ? x : (screenSize.width - paneSize.width) / 2,
                                  (y != null) ? y : (screenSize.height - paneSize.height) / 2);
        }
    Ca fait beaucoup mais ça marche bien

    Pour chercher les Preferences dans la classe de la Frame par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Preferences prefs = Preferences.userNodeForPackage(this.getClass())
    Par défaut sous Windows ça ira dans la base de registre à moins de changer l'implémentation de Preferences utilisée.

    oki j'avais pas reflechis a la JFrame en elle même ^^ (plus concentré sur ce qu'il y a dedans) mais ca peut servir ^^

  16. #16
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    bonjour,

    j apporte ma pierre à l'édifice. J eu a faire ca il y a quelques temps deja et j avais utilisé XML + refractoring

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <jframe nom="main" x="" y="" height="" width="">
        <jinternalframe nom="nomdanslapplication" x="" y="" height="" width=""/>
        <jinternalframe nom="nomdanslapplication" x="" y="" height="" width=""/>
    </jframe>
    Dans tes constructeur de frame tu cherche le noeud xml qui correspond a ta fenetre et qui decrit tes composants/attributs graphiques.

    Ensuite, une petite boucle et quelques appel par reflexivité et le c'est fait.

    Je trouvais que cette méthode était relativement générique, apres ce n'est que mon avis.
    Elle est peut etre un poil plus complexe techniquement, mais en réfléchissant bien le code à écrire est pas long.

  17. #17
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Par défaut
    Citation Envoyé par BainE
    bonjour,

    j apporte ma pierre à l'édifice. J eu a faire ca il y a quelques temps deja et j avais utilisé XML + refractoring

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <jframe nom="main" x="" y="" height="" width="">
        <jinternalframe nom="nomdanslapplication" x="" y="" height="" width=""/>
        <jinternalframe nom="nomdanslapplication" x="" y="" height="" width=""/>
    </jframe>
    Dans tes constructeur de frame tu cherche le noeud xml qui correspond a ta fenetre et qui decrit tes composants/attributs graphiques.

    Ensuite, une petite boucle et quelques appel par reflexivité et le c'est fait.

    Je trouvais que cette méthode était relativement générique, apres ce n'est que mon avis.
    Elle est peut etre un poil plus complexe techniquement, mais en réfléchissant bien le code à écrire est pas long.
    oui c'est pas mal ^^ .. j'aurais le temps j'aurais pris cette méthode et j'en aurais profité pour apprendre le xml .. mais me reste plus qu'un mois de stage et j'avoue que du coup j'essaye d'aller au plus rapide .... (mais je garde l'idée dans ma boite a idée ^^)

  18. #18
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Par défaut
    donc pour frame / Internal Frame vous m'avez tous bien aidé je pense que ca je vais reussir a les replacer ou y faut ...

    maintenant me reste l'interieur lol ...

    je pourrais faire plus au moins le meme principe (dedans j'ai un empilement de JPanel)

    j'ai 3 types de panel 2 dependent exclusivement d'un objet param qui contiens des parametre numerique ou string donc la pas de problème je devrais pouvoir sauver facile.

    Me reste le troisième dont l'unique paramètre est une HashMap et la je seche :

    la tete de la class :
    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
     
    InfoDataPan(HashMap data)
    	{
    		JLabel dataLab = new JLabel("<html>database: <b>"+(String)data.get("dbName")+"</b></html>");
    		JLabel space = new JLabel("               ");
    		JLabel nbGene = new JLabel("<html>number of genes: <b>"+(((HashMap)data.get("dataGene")).size())+"</b></html>");
    		JLabel space2 = new JLabel("               ");
    		StringBuffer tf = new StringBuffer();
    		for (int i = 0; i < ((ArrayList)data.get("TFsList")).size(); i++)
    		{
    			tf.append(((ArrayList)data.get("TFsList")).get(i)+";");
    		}
    		JLabel ListTF = new JLabel("<html>Transcription factors: <b>"+tf+"</b></html>");
     
     
    		JXTable jtable = new JXTable((String[][])data.get("table"), (String[])data.get("attributes"));
    		jtable.setEditable(false);
    		this.setLayout(new BorderLayout());
     
    		JPanel pan1 = new JPanel();
    		//pan1.setLayout(new GridLayout(1,2));
    		pan1.add(dataLab);
    		pan1.add(space);
    		pan1.add(nbGene);
    		pan1.add(space2);
    		pan1.add(ListTF);
    		this.add(pan1, BorderLayout.NORTH);
    		this.add(new JScrollPane(jtable), BorderLayout.CENTER);
    	}

    a moins de serializer cette HashMap mais je vois pas comment gere derrière le fichier crée ...(car je peut en avoir 1 comme 100).

    Ptet un générateur de nom de fichier incrémentable ... hum ....

  19. #19
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Utilise les Preferences comme dans mon code pour la JFrame.
    Tu n'as pas à gérer le fichier créé.

  20. #20
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Par défaut
    Bon .

    Comme j'arrive pas à voir exactement comment mettre une hashMap dans les preferences je m'en suis inspiré pour faire mon propre truc qui est une HashMap d'arraylist d'arraylist de hashmap (O o O) et qui sauve la totalité d'une session ! le tout en n'ayant a la fin a serialisé qu'une hashmap pour sauver ... (par contre le load ca va etre rigolo ! mais faisable ^^)

    Merci à tous ! ca c'est un super truc que j'aurais apris pendant mon Stage ^^

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

Discussions similaires

  1. sauvegarde de programme de tests LV 2010
    Par yoz'st dans le forum LabVIEW
    Réponses: 16
    Dernier message: 28/10/2011, 15h44
  2. Sauvegarde de programme
    Par Bokujuu dans le forum Débuter
    Réponses: 5
    Dernier message: 09/09/2009, 20h33
  3. Stratégie sauvegarde uri
    Par Katachana dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 12/07/2007, 09h24
  4. sauvegarde via programme ecrit en C#
    Par ducker88 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 10/07/2006, 15h39
  5. [Stratégie]Sauvegarde d'une liste chainée dans un fichier
    Par BernardT dans le forum Général Java
    Réponses: 17
    Dernier message: 25/07/2005, 17h04

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