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

AWT/Swing Java Discussion :

Récuperer des données


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 35
    Par défaut Récuperer des données
    Bonjour à tous,
    Voilà, je vous explique mon problème.J'ai crée un programme qui crée une interface graphique en fonction d'un fichier XML.Du coup je ne sais pas combien de champs, de panels etc je peux avoir..
    Maintenant je voudrais créer un module qui permet de récupérer les modifications qu'on a mise dans l'interface(dans les TextArea, etc...) afin de les restocker dans le fichier XML.
    Le problème est que je ne sais pas comment procéder pour récuperer les infos dans l'interface..
    Merci d'avance pour votre aide

    Raadgever

  2. #2
    Membre expérimenté
    Profil pro
    Dev NodeJS
    Inscrit en
    Août 2006
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev NodeJS

    Informations forums :
    Inscription : Août 2006
    Messages : 177
    Par défaut
    Tu peux parcourir l'arborescence des composants en utilisant les propriétés de JComponent et effectuer des traitements quand tu tombe sur un TextArea ou autre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void parcourir( JComponent composant){
        for( JComponent c: composant.getComponents()){
     
            parcourir(c);
        }
        if(composant instance of JTextArea){
            // traitement
        }
    }

  3. #3
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Voici une idée en passant par une interface :
    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
     
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Writer;
    import java.util.HashMap;
    import java.util.Map;
     
    import javax.swing.JCheckBox;
    import javax.swing.JComponent;
    import javax.swing.JTextField;
     
    public class TestDynamicComponent {
     
        private final Map<String, DynamicComponent> map =
            new HashMap<String, DynamicComponent>();
     
     
     
        public TestDynamicComponent() { }
     
     
        public void add(DynamicComponent component) {
            map.put(component.getId(), component);
            // puis ajout du composant dans l'affichage avec component.getComponent().
        }
     
     
        public void remove(DynamicComponent component) {
            map.remove(component.getId());
            // puis suppression du composant de l'affichage.
        }
     
        // récupère toutes les valeurs des composants installés à un moment donné.
        public void saveValues() throws IOException {
            Writer out = new FileWriter("...");
            for(DynamicComponent component : map.values()) {
                out.write(component.getId() +" : "+ component.getValue());
            }
            out.close();
        }
    }
     
     
     
    //----------------------------------------------------------------
    //----------------------------------------------------------------
    interface DynamicComponent {
     
        // Permet d'identifier le composant
        public String getId();
     
        // Donne la valeur du composant
        public String getValue();
     
        // Donne le composant destiné à l'affichage
        public JComponent getComponent();
    }
     
     
    //----------------------------------------------------------------
    //----------------------------------------------------------------
    class DynamicTextField extends JTextField implements DynamicComponent {
        private static final long serialVersionUID = 1L;
     
        private final String id;
     
        public DynamicTextField(String id) {
            super();
            if(id == null || id.length() == 0)
                throw new IllegalArgumentException("id");
     
            this.id = id;
        }
     
     
        public JComponent getComponent() {
            return this;
        }
     
     
        public String getId() {
            return id;
        }
     
     
        public String getValue() {
            return getText();
        }
    }
     
     
    //----------------------------------------------------------------
    //----------------------------------------------------------------
    class DynamicCheckBox extends JCheckBox implements DynamicComponent {
        private static final long serialVersionUID = 1L;
     
        private final String id;
     
        public DynamicCheckBox(String id) {
            super();
            if(id == null || id.length() == 0)
                throw new IllegalArgumentException("id");
     
            this.id = id;
        }
     
        public JComponent getComponent() {
            return this;
        }
     
     
        public String getId() {
            return id;
        }
     
     
        public String getValue() {
            return isSelected() ? "true" : "false";
        }
    }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 35
    Par défaut
    Si je comprends biens ngpub tu me conseille de créer une classe spécifique à chaque composant et d'y implenter mes méthodes pour récupérer les données ?
    cad au lieu de faire JPanel panel = new JPanel(); je fais JDynamicPanel panel = new JDynamicPanel();



    Sinon yciabaud..ta solution me parait simple..le problème c'est que j'ai énormément de Panel empilés et je sais pas naviguer entre les panels....

  5. #5
    Membre expérimenté
    Profil pro
    Dev NodeJS
    Inscrit en
    Août 2006
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev NodeJS

    Informations forums :
    Inscription : Août 2006
    Messages : 177
    Par défaut
    Ma méthode fonctionne quelle que soit le nombre de composants, tu part du RootPane de la Frame et tu parcoure tout l'arbre ainsi.

    Rappel: JPanel est un JComponent donc pas de soucis pour naviguer entre les JPanel

    Pour te convaincre fait un list() sur ta Frame!

  6. #6
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    ou qq chose comme ça :

    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
        public Map parcourir(Component c) {
          Map map = new HashMap();
          parcourir(c, map, new ValuerImpl());
          return map;
        }
     
        private void parcourir(Component c, Map map, Valuer v) {
            Object value = v.valueOf(c));
            if (value != null) {
                map.put(c, value);
            }
     
            if (c instanceof Container) {
                Component[] children = ((Container) c).getComponents();
                for (int i = 0; i < children.length; i++) {
                    parcourir(children[i], map, v);
                }
            }
        }
     
     
        interface Valuer {
          Object valueOf(Component c);
        }
     
        class ValuerImpl implements Valuer {
     
          static Map valuers = new HashMap();
          static {
             valuers.put(JTextField.class,
                             new Valuer() {
                                public Object valueOf(Component c) {
                                   return ((JTextField) c).getText();
                                }
                             });
             valuers.put(JCheckBox.class,
                             new Valuer() {
                                public Object valueOf(Component c) {
                                   return Boolean.valueOf(((JCheckBox) c).isSelected());
                                }
                             });
             ...
          }
     
          public Object valueOf(Component c) {
             Valuer v= valuers.get(c.getClass());
             return v!= null ? v.valueOf(c) : null;
          }
        }

  7. #7
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Oui si tu souhaites récupérer une valeur dans ton panel.
    C'est juste une idée, je n'ai pas suffisamment d'infos sur ton problème pour te dire que c'est une bonne solution.

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

Discussions similaires

  1. Récuperer des données de fiches passées au scanner
    Par Sunchaser dans le forum C++Builder
    Réponses: 8
    Dernier message: 17/11/2006, 23h44
  2. récuperer des données d'un fichier xml
    Par Ljungberg dans le forum XML
    Réponses: 4
    Dernier message: 13/06/2006, 09h54
  3. Récuperation des données envoyées par Form en POST
    Par bobatel dans le forum Langage
    Réponses: 9
    Dernier message: 26/04/2006, 14h59
  4. Récuperer des données aprés formatage
    Par WELCOMSMAIL dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 21/04/2006, 10h56
  5. Comment récuperer des données entrées au clavier?
    Par Elisée A. dans le forum MFC
    Réponses: 2
    Dernier message: 13/02/2004, 07h22

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