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 :

Accéder à un JTextArea généré dans un TabbedPane généré


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut Accéder à un JTextArea généré dans un TabbedPane généré
    Bonjour,

    Mon titre n'est peut-être pas explicite alors je vais essayer d'expliquer.

    J'ai fais un code qui génère des onglets avec dedans un JTextArea.
    Ce code permet cette génération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        /**
         * Si on appuie sur le bouton créer un onglet
         * @param evt
         */
        private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {                                           
            JTextArea text = new JTextArea();
            JScrollPane scroll = new JScrollPane(text);
     
            jTabbedPane1.addTab("Nouveau rapport", scroll);
        }
    Plus loin, quand je clique droit sur un des onglets générer, je fais parveni une popup qui permet (pour le moment) de fermer l'onglet et d'effacer le contenu du JTextArea. Ce code me permet de créer le menu et d'en avoir des actions. Il est décliner en deux partie.
    Première partie le listener de la souris:
    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
     
    /**
         * Ecouteur logiciel des évenements de la souris sur les composants
         */
        private void mouseListener() {
     
     
            //Enregistrement de l'écouteur
            jTabbedPane1.addMouseListener(
     
                //Classe écouteur
                new java.awt.event.MouseAdapter() {
     
                    //Si c'est le JTabbedPane qui est à l'origine de l'appel
                    @Override
     
                    public void mousePressed(MouseEvent evtM) {
                    //public void mouseReleased(MouseEvent evtM) {
     
                        //On regarde si c'est le clic droit
                        if(SwingUtilities.isRightMouseButton(evtM)) {
     
                            int numTab = jTabbedPane1.getSelectedIndex();
     
                            if (numTab != -1) {
     
                                JPopupMenu popMenu = new JPopupMenu();
     
                                    popMenu.add(new CloseTab(numTab));
                                    popMenu.addSeparator();
                                    popMenu.add(new ClearInTab(numTab));
     
                                    popMenu.show(evtM.getComponent(), evtM.getX(), evtM.getY());
                            }
                        }
                    }
                }
            );
        }
    Seconde partie les private class qui écoute les choix du popup menu.
    Je ne vais parler que du cas du bouton N°2 car c'est celui qui m'intéresse. Il est donc explicitement appeler par un new dans le code au dessus.
    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
     
            public void actionPerformed(ActionEvent e) {
     
                //Crée une boite de dialogue de confirmation
                int r = JOptionPane.showConfirmDialog(
                        null,
                        "Effacer le contenu de l'onglet",
                        "Que voulez-vous faire ?",
                        JOptionPane.YES_NO_OPTION,
                        JOptionPane.QUESTION_MESSAGE
                );
     
                //Traite la confirmation de la boite de dialogue
                if(r == JOptionPane.YES_OPTION) {
                    System.out.println("Effacement du contenu de l'onglet " + index);
                    //ici je cherche à sélectionné le JTextArea pour lequel je veux faire un clear.
                }
            }
        }
    Comme on le voie sur cette dernière portion de code il me faut accéder au JTextArea mais je n'ai pas le nom vue qu'il est généré tout en haut par le premier code. En revanche je connais le nom du tab(du moins son index).

    Je suppose que la méthode serais alors :
    Donner la liste de composant contenu dans l'index tab X. Repérer dans la liste le JTextArea et lui appliquer la mention clear.

    Comment peut-on faire ça ?

    Merci pour votre aide

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    crée une classe spécifique qui englobe ton onglet, ajoute la a une liste et sert toi de cette liste par la suite pour manipuler les élément de l'onglet. Genre une classe "Rapport"

  3. #3
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Merci Tchize pour la réponse.

    Seulement je ne voie pas comment je pourrait créer une classe spécifique.
    Encore moins comment dedans je puis mettre une liste.

    Un peu d'aide pour mettre en forme me serait-utile.

    Merci

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Citation Envoyé par Microbulle Voir le message
    Seulement je ne voie pas comment je pourrait créer une classe spécifique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class Rapport {
        public JTextArea leTextArea;
    }
    par exemple

    Encore moins comment dedans je puis mettre une liste.
    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
    private List<Rapport> listeRapport = new ArrayList<Rapport>();
    .....
        private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {                          
            Rapport r= new Rapport();
            r.leTextArea = new JTextArea();
            listeRapport.add(r);                 
            JScrollPane scroll = new JScrollPane(r.leTextArea); 
            jTabbedPane1.addTab("Nouveau rapport", scroll);
        }  
     
    ....
                if(r == JOptionPane.YES_OPTION) {
                    System.out.println("Effacement du contenu de l'onglet " + index);
                    listeRapport.get(index).leTextArea.clear();
                }

  5. #5
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Donc, si j'ai bien compris,

    La ou j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class MainForm extends javax.swing.JFrame {
     
        /** Creates new form MainForm */
        public MainForm() {
            initComponents();
            mouseListener();  
        }
     
    ......
    Je fais appel à ma classe, qui existe déjà car:
    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
     
    /**
         * Ecouteur logiciel des évenements de la souris sur les composants
         */
        private void mouseListener() {
     
     
            //Enregistrement de l'écouteur
            jTabbedPane1.addMouseListener(
     
                //Classe écouteur
                new java.awt.event.MouseAdapter() {
     
                    //Si c'est le JTabbedPane qui est à l'origine de l'appel
                    @Override
     
                    public void mousePressed(MouseEvent evtM) {
                    //public void mouseReleased(MouseEvent evtM) {
     
                        //On regarde si c'est le clic droit
                        if(SwingUtilities.isRightMouseButton(evtM)) {
     
                            int numTab = jTabbedPane1.getSelectedIndex();
     
                            if (numTab != -1) {
     
                                JPopupMenu popMenu = new JPopupMenu();
     
                                    popMenu.add(new CloseTab(numTab));
                                    popMenu.addSeparator();
                                    popMenu.add(new ClearInTab(numTab));
     
                                    popMenu.show(evtM.getComponent(), evtM.getX(), evtM.getY());
                            }
     
                            //String numTab = Integer.toString(jTabbedPane1.getSelectedIndex());
     
                            //JPopupMenu popMenu = new JPopupMenu();
                                //popMenu.add("fermer l'onglet " + numTab);
                                //popMenu.show(evtM.getComponent(), evtM.getX(), evtM.getY());
                        }
                    }
                }
            );
        }
    Il faut que je place dedans les deux:
    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
     
    private class CloseTab extends AbstractAction {
     
            private int index;
     
            private CloseTab(int index) {
                super("Fermer l'onglet" + index);
                this.index = index;
            }
     
     
            public void actionPerformed(ActionEvent e) {
     
                //Crée une boite de dialogue de confirmation
                int r = JOptionPane.showConfirmDialog(
                        null,
                        "Fermer l'onglet sélectionné",
                        "Que voulez-vous faire ?",
                        JOptionPane.YES_NO_OPTION,
                        JOptionPane.QUESTION_MESSAGE
                );
     
                //Traite la confirmation de la boite de dialogue
                if(r == JOptionPane.YES_OPTION) {
                    //System.out.println("Fermeture de l'onglet " + index);
                    jTabbedPane1.removeTabAt(index);
                }
            }
        }
     
        private class ClearInTab extends AbstractAction {
     
            private int index;
     
            private ClearInTab(int index) {
                super("Effacer le contenu de l'onglet" + index);
                this.index = index;
            }
     
     
            public void actionPerformed(ActionEvent e) {
     
                //Crée une boite de dialogue de confirmation
                int r = JOptionPane.showConfirmDialog(
                        null,
                        "Effacer le contenu de l'onglet",
                        "Que voulez-vous faire ?",
                        JOptionPane.YES_NO_OPTION,
                        JOptionPane.QUESTION_MESSAGE
                );
     
                //Traite la confirmation de la boite de dialogue
                if(r == JOptionPane.YES_OPTION) {
                    System.out.println("Effacement du contenu de l'onglet " + index);
                    //ici je cherche à sélectionné le JTextArea pour lequel je veux faire un clear.
     
                }
            }
        }
    Et en haut un champ contenant une liste qui s'incrémente. Mais ca me semble un peu complexe à mettre en place.

    J'ai pas intérer à ce compte là à faire une classe publique (qui revoi les noms de les tab avec celui de mes index) ?

    Exemple, quand je sélectionne un index, je me retrouve avec en face le nom du jTextArea. Ainsi, je ne touche pas à ce qui est fait et qui fonctionne.

    A moins que ça ne soit pas bon avec l'encapsulation.

    Merci

  6. #6
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    J'ai essayer ce matin cette configuration expliquer par Tchize.

    Comme je l'avais initialement pensé, ça ne fonctionne pas n'ayant pas la main sur certaines portions de code.

    J'aimerais trouvé une autre solution plus souple et permettant de resté dans la configuration du code du haut. Si c'est possible.

    Merci

Discussions similaires

  1. Graphique généré dans Excel
    Par charleshbo dans le forum Access
    Réponses: 2
    Dernier message: 22/03/2006, 21h31
  2. remplacer du texte dans un tableau généré
    Par jcaruana dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/02/2006, 17h36
  3. [VB]Comment imprimer 1 graph généré dans un chartspace (OWC)
    Par alexxx69 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/01/2006, 22h56
  4. [Hibernate3] Anomalies dans le SQL généré
    Par mauvais_karma dans le forum Hibernate
    Réponses: 6
    Dernier message: 16/08/2005, 10h58
  5. écrire dans un champs généré dynamiquement
    Par scoder dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 08/12/2004, 11h14

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