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 :

JTabbedPane Dynamique SwingWorker


Sujet :

Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

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

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut JTabbedPane Dynamique SwingWorker
    Bonjour à tous,

    Je réalise actuellement une application pour un stage en JAVA permettant de "monitorer" les incidents sur les voies ferrées dans une grande société nationale.. LOL

    Le principe est de lire des fichiers de log et de les afficher dans des onglets distinguant les différents lieux de recueillement des informations. Jusque là tout va bien, j'ai fais une BDD permettant de récupérer les lieux et les fichiers correspondant et je sais les lire.
    Mais voilà, j'ai crée une JTabbedPane et j'ajoute dynamiquement des onglets (extends JPanel) à l'aide de SwingWorkers, ok ça marche. Ces onglets possède tous une même JTextArea que je voudrais mettre à jour à l'aide des fichiers.

    Voilà mon problème, je ne comprends pas comment je peux mettre à jour tous les JTextArea de manière indépendante, en effet quand je tente de les mettre à jour, c'est le JtextArea du dernier onglet qui se met à jour et les autres ne reçoivent rien..

    Un p'tit bout de code pour comprendre :
    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
     
    public class View_Onglet extends javax.swing.JPanel {
     
        Onglet_SwingWorker s = new Onglet_SwingWorker();
     
        class Onglet_SwingWorker extends SwingWorker<String, Object> {
     
            public Onglet_SwingWorker() {
                addPropertyChangeListener(new PropertyChangeListener() {
                    @Override
                    public void propertyChange(PropertyChangeEvent evt) {
                        if ("progress".equals(evt.getPropertyName())) {
                            jProgressBar1.setValue((int) evt.getNewValue());
                        }
                    }
                });
            }
             //Ici je récupère une string comprenant les infos du fichier
            @Override
            protected String doInBackground() throws Exception {
                Controller.Controller_TraitementFichier t = new Controller_TraitementFichier(View_Application.getJPanel(), "Montluçon");
                return t.Traitement();
            }
     
            @Override
            protected void done() {
                setProgress(100);
                try {
                    //Je mets à jour le JTextArea
                    jTextArea1.append(String.valueOf(get()));
                } catch (InterruptedException | ExecutionException ex) {
                    Logger.getLogger(View_Onglet.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
     
        /**
         * Creates new form JPanel1
         *
         * @param systeme Il prend en paramètre un système
         */
        public View_Onglet(Model.Model_Systeme systeme) {
            initComponents();
            Timer t = new Timer(2000, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    SwingUtilities.invokeLater(new Runnable() {
                        @Override
                        public void run() {
                            interrompreOnglet.setText("Interrompre");
                            s.execute();
     
     
                        }
                    });
                }
            });
            t.start();
     
            interrompreOnglet.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    if (interrompreOnglet.getText().equals("Reprendre")) {
                        s.execute();
                    } else {
                        interrompreOnglet.setText("Reprendre");
                        s.cancel(true);
                    }
                }
            });
        }
     
        /**
         *
         * @param s
         */
        public static void changeTexteArea1(String s) {
            jTextArea1.append(s);
        }
    Je sais pas si j'ai été assez clair mais honnêtement je suis un peu perdu...

    Merci de votre aide.

  2. #2
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Difficile d'y voir clair avec si peu de code mais comme on ne voit pas l'instanciation de jTextArea1, au feeling, je dirais que la référence passée à tes View_Onglet est la meme.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

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

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    En effet, mon JPanel que j'ajoute à ma JTabbedPane est crée à partir du GUI builder sur Netbeans, donc le jtextarea est le même pour tous les onglets, c'est là d'où vient mon problème mais je ne comprends pas comment les différencier...

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

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

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Je crois avoir trouvé, comme tu me l'a dis l'instanciation du JTextArea est important car en effet il était, pour une raison que j'ignore, en public static... je l'ai repassé en private et magie mes jtextarea se remplisse bien tous comme il se doit !

    Je te remercie.

  5. #5
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    De ce que je comprends, le JTextArea est lié fonctionnellement au View_Onglet. Pourquoi ne pas l'instancier dans celui-ci ?

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

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

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Mon JTextArea est bien instancié dans View_Onglet, je n'avais juste pas collé tout le code.

    j'aurais une autre question, je voudrais lancer les SwingWorker toutes les minutes , j'ai essayé de mettre un Timer à l'exécution du SwingWorker mais il me semble que le doInBackground ne peut pas être lancé plusieurs fois?

    EDIT: pour être plus clair je veux récupérer les fichiers logs toutes les x minutes par exemple.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

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

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    J'ai trouvé ma réponse, dans le doInBackground je crée un timer.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/11/2013, 14h52
  2. Onglets dynamiques avec JTabbedPane
    Par Yann_69 dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 03/07/2012, 17h09
  3. JTabbedPane avec onglets dynamique
    Par oOoOuuhmAn dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 18/03/2006, 16h23
  4. [JTabbedPane] Accès à des composants dynamiques
    Par SamRay1024 dans le forum Composants
    Réponses: 8
    Dernier message: 26/05/2004, 13h04
  5. repertoire temp dynamique
    Par killpilot dans le forum C
    Réponses: 2
    Dernier message: 26/04/2002, 16h19

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