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

Composants Java Discussion :

Serialisation avec Swing


Sujet :

Composants Java

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

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut Serialisation avec Swing
    Bonjour,

    lorsque je consulte la documentation sur les classes JAVA sur le site de Sun, je rencontre souvent le message d'avertissement suivant:
    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.
    Concrètement, cela signifie quoi ?
    Je débute en JAVA et je suis en train de programme une petite application avec une JTable, et une classe qui étend AbstractTableModel. Y a-t-il des précautions particulières à prendre par rapport à ce message ?

    Merci & @ bientôt

  2. #2
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Bonjour,

    Cela signifie que si tu t'amuses à sérialiser tes composants Swing à une version de Java donnée, il est possible que tu rencontre des problèmes pour les désérialiser dans une version de Java supérieure.

    Mais je doute que tu aies réellement besoin de sérialiser des composants

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

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    OK, merci.

    Effectivement, la sérialisation de composants ne présente aucun intérêt pour moi pour le moment.
    J'y réfléchirai peut être plus tard lorsque j'aurai plus d'expérience JAVA.

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Comme indiqué, pour sérialiser les composant swing sans avoir de problème dans les versions futures de Java il faut utiliser la sérialisation XML du package java.beans avec les classes XMLEncoder et XMLDecoder. Voir aussi La sérialisation XML en Java
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  5. #5
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Mais quel intéret de sérialiser des composants Swing?
    Cela m'intrigue...

  6. #6
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Et bien pour pouvoir retrouver plus tard le composant dans l'état exact où il était au moment de sa sérialisation. Après il est vrai que ce besoin ne fait pas parti des plus courant ^^.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  7. #7
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Stocker une Interface, cela ressemble à une erreur de conception pour ma part
    D'où ma question.

  8. #8
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Citation Envoyé par Deaf Voir le message
    Stocker une Interface, cela ressemble à une erreur de conception pour ma part
    D'où ma question.
    Pas forcément ou peut très bien imaginer stocker des composants d'une interface pour les ressortir dans l'état même ou ils étaient lors de la dernière exécution de l'application (position des scrollpanes, filtres & cie).

  9. #9
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Ah ben je vois que le sujet n'est pas sans intérêt.

    Mon idée de départ était de pouvoir démarrer une application et de permettre à l'utilisateur de retrouver les éléments comme il l'avait laissé à la dernière utilisation; par exemple:

    * Une ComboBox sur le dernier index positionné,
    * Un TexteField avec le dernier texte entré,
    * Une JTable sur la ligne visionnée avant la fermeture

    Donc, sans approfondir le sujet, j'avais pensé à cette possibilité de sérialisation des composants.
    Evidemment, on peut toujours s'en sortir en utilisant des variables internes sauvegardées dans le fichier de données...

    M'enfin voila l'idée. Or comme il y a ce message d'avertissement dans la documentation Java, je me contenterai de la seconde solution...

  10. #10
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par rtg57 Voir le message
    Ah ben je vois que le sujet n'est pas sans intérêt.

    Mon idée de départ était de pouvoir démarrer une application et de permettre à l'utilisateur de retrouver les éléments comme il l'avait laissé à la dernière utilisation; par exemple:

    * Une ComboBox sur le dernier index positionné,
    * Un TexteField avec le dernier texte entré,
    * Une JTable sur la ligne visionnée avant la fermeture

    Donc, sans approfondir le sujet, j'avais pensé à cette possibilité de sérialisation des composants.
    Evidemment, on peut toujours s'en sortir en utilisant des variables internes sauvegardées dans le fichier de données...

    M'enfin voila l'idée. Or comme il y a ce message d'avertissement dans la documentation Java, je me contenterai de la seconde solution...
    C'est bien là qu'est l'intérêt de cette sérialisation XML. Ce mécanisme a été introduit justement pour être utilisé avec les ihms (bien qu'on puisse l'utiliser sur d'autres beans) au lieu de la sérialisation "classique" qui pose les problèmes de version .
    Ainsi tu peux sérialiser ton ihm sans avoir à t'occuper de tout écrire toi même (récupération des propriétés dans des variables, les écrires dans un fichier, etc.)
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  11. #11
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Je suis désolé, mais je ne vois toujours pas l'intérêt de sérialiser des composants.

    Si mon interface est dans un certain état, c'est à cause de l'état de mon modèle auquel il est relié. Si je veux conserver l'état, je sérialise mon modèle et je synchronise mon IHM quand je veux retrouver l'état précédent.

    Dans mon esprit, un composant ne doit pas contenir d'état important (que des états temporaires du genre : bouton enfoncé, survolé), il doit juste refléter tout ou partie du model sous-jacent. Et donc, il ne possède rien qui mérite d'être sérialisé.

    Enfin, c'est mon point de vue

  12. #12
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    C'est intéressant pour tout ce qui ne ressort pas des données de l'application, genre position d'un JScrollPäne, ordre des colonnes d'une JTable, sélection d'une partie du texte d'un JTextPane par exemple, Etat d'ouverture/fermeture des branches d'un JTree et ainsi de suite.

  13. #13
    Membre expérimenté Avatar de uhrand
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 203
    Par défaut
    Citation Envoyé par sinok Voir le message
    C'est intéressant pour tout ce qui ne ressort pas des données de l'application, genre position d'un JScrollPäne, ordre des colonnes d'une JTable, sélection d'une partie du texte d'un JTextPane par exemple, Etat d'ouverture/fermeture des branches d'un JTree et ainsi de suite.
    sinok,
    j'ai des doutes que ça puisse réellement fonctionner comme tu le décrit.

    Je suis d'ailleur du même avis que Deaf. Si on prend par exemple la taille et la position des colonnes d'une JTable: il sufffit de sérialiser le TableColumnModel.

    Aussi, c'est facile de sérialiser un modèle avec XMLEncoder: il suffit de s'assurer que le modèle est une "public class" avec un constructeur par défaut (sans paramètre) et des "getter/setter" pour les attributs. Voici un exemple d'un TableColumnModel:
    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
     
    /*
     * MyColumnModel.java
     * is a bean that can be saved/loaded using XMLEncoder/XMLDecoder
     */
    import java.util.*;
    import javax.swing.table.*;
     
    public class MyColumnModel extends DefaultTableColumnModel {
     
        private Object[] columnData = new Object[]{
            "Title 1", 100, //column 1: header value, width
            "Title 2", 50,  //column 2: header value, width
            "Title 3", 50,  //column 3: header value, width
            "Title 4", 50   //column 4: header value, width
        };
     
        public MyColumnModel() {
            super();
            for (int i = 0; i < columnData.length; i += 2) {
                String title = (String) columnData[i];
                Integer width = (Integer) columnData[i + 1];
                TableColumn tableColumn = new TableColumn(i / 2, width);
                tableColumn.setHeaderValue(title);
                addColumn(tableColumn);
            }
        }
     
        public Vector<TableColumn> getTableColumns() {
            return tableColumns;
        }
     
        public void setTableColumns(Vector<TableColumn> tableColumns) {
            this.tableColumns = tableColumns;
        }
    }

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

Discussions similaires

  1. Skinner un bouton avec swing
    Par nicolas.pied dans le forum Composants
    Réponses: 10
    Dernier message: 29/11/2005, 01h11
  2. [Design Patterns] Decorator avec Swing ?
    Par herve91 dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 09/10/2005, 14h00
  3. Ajouter des composants à chaud avec Swing
    Par raj dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 02/12/2004, 10h34
  4. Comment afficher du texte avec swing ?
    Par meda dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 27/10/2004, 14h35
  5. Afficher une image avec swing
    Par arnonote dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 07/08/2004, 12h10

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