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 :

[Applet] Problème de lenteur d'un JTree


Sujet :

Composants Java

  1. #1
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut [Applet] Problème de lenteur d'un JTree
    Bonjour tout le monde !

    Alors voilà j'ai créé un JTree dans un Applet ; ce JTree contient un noeud principal, et ce noeud contient 10 sous-noeuds et chaque sous-noeud contient 26 éléments.
    Le problème est que lorsque je lance mon programme en local (c'est-à-dire directement sur mon PC) le JTree réagit normalement aux clics de souris, mais lorsque je le lance en tant qu'applet sur mon adresse FTP, le JTree réagit vraiment très très lentement aux actions de l'utilisateur.

    Bref, j'aimerai savoir comment les JTree se comportent au sein d'un applet (genre si ils sont plus lents) ; je ne pense pas que le problème provienne du réseau (même s'il est assez lent), vu que l'intéraction avec les JButton ainsi quavec les autres composants de mon interface se déroule normalement.

    Si quelqu'un avait la moindre idée, elle serait vraiment la bienvenue !
    Merci d'avance !!!

  2. #2
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    A tout hasard je vous met le code correspondant à la création du JTree...

    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
    121
    122
    123
    private JTree getTree() {
        int j = 0;
        double d;
        //Je groupe mes fichiers par 25 dans chaque noeud parent
        int nRoot = 25;
     
        //root est le noeud principal
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("Listing of layers");
        //rootNode sont les noeuds qui contiennent 25 sous-noeuds
        DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode();
        //node sont les noeuds de base
        DefaultMutableTreeNode node = new DefaultMutableTreeNode();
     
        //listObjectFileName.get(i) est une ArrayList contenant le nom de mes fichiers
        //Enumération de tous ses composants
        for (int i = 0 ; i<listObjectFileName.size() ; i++) {
     
            if (i == nRoot * j) {
                if (nRoot * (j+1) > listObjectFileName.size()) {
                    rootNode = new DefaultMutableTreeNode(listObjectFileName.get(i) + " - " + listObjectFileName.get(listObjectFileName.size()-1));
                }
                else {
                    rootNode = new DefaultMutableTreeNode(listObjectFileName.get(i) + " - " + listObjectFileName.get(nRoot * (j+1) - 1));
                }//endif
                root.add(rootNode);
                j++;
            }//endif
     
            node = new DefaultMutableTreeNode(listObjectFileName.get(i));
            rootNode.add(node);
     
        }//endfor
     
        tree = new JTree(root);
        tree.setCellRenderer(myRenderer);
        mouseTree = new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                //selRow permet de savoir quel
                int selRow = tree.getRowForLocation(e.getX(), e.getY());
                TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
                if(selRow != -1) {
                    //gestion du simple clic
                    if(e.getClickCount() == 1) {
                        System.out.println("selRow = " + selRow);
                    }
                    //gestion du double-clic sur les sous-noeuds
                    else if(e.getClickCount() == 2) {
                        //selPath.getPathComponent(2) retourne l'objet "node" : les sous-noeuds quoi...
                        Object object = selPath.getPathComponent(2);
                        String objectString = object.toString();
                        //index pour savoir à quelle position dans la liste l'objet se situe
                        index = listObjectFileName.indexOf(objectString);
     
                        //listObjectIsOn est une ArrayList qui contient des "0" ou des "1" pour savoir si l'objet en question est affiché
                        if (listObjectIsOn.get(index).toString() == "1") {
                            //on fabrique un BranchGroup vide pour remplacer un BranchGroup existant : supprimer un objet à l'écran
                            emptyObject = new BranchGroup();
                            emptyObject.setCapability(BranchGroup.ALLOW_DETACH);
                            emptyObject.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
                            emptyObject.setCapability(BranchGroup.ALLOW_CHILDREN_READ);
                            emptyObject.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
                            //objectLoaded est le BranchGroup parent regroupant les BranchGroup contenant des objets
                            objectLoaded.setChild(emptyObject, index);
                            //mettre l'objet à "0"
                            listObjectIsOn.set(index, "0");
                        }
                        else {
                            //on créé un nouveau BranchGroup pour ajouter l'objet correspondant au sous-noeud double-cliqué
                            BranchGroup addObject = loadWavefrontObject(listObjectFileName.get(index).toString());
                            //on remplace le BranchGroup actuel dans le BranchGroup objectLoaded par le nouveau créé
                            objectLoaded.setChild(addObject, index);
                            listObjectIsOn.set(index, "1");
                        }//endif
                    }//endif
                }//endif
            }//end mousePressed
        };
        return tree;
    }
     
    public class MyRenderer extends DefaultTreeCellRenderer {
     
        public MyRenderer() {
            super();
        }
     
        //Redéfini la méthode getTreeCellRendererComponent
        public Component getTreeCellRendererComponent(JTree tree, Object value,boolean sel, boolean expanded, boolean leaf, int row,boolean hasFocus) {
            //icône pour les objets présents
            ImageIcon fold = new ImageIcon(getClass().getClassLoader().getResource("Pictures/File2.png"));
            //icône pour les objets cachés à l'écran
            ImageIcon fold2 = new ImageIcon(getClass().getClassLoader().getResource("Pictures/NoFile2.png"));
            //icône pour les noeuds parents ouverts
            ImageIcon fold3 = new ImageIcon(getClass().getClassLoader().getResource("Pictures/OpenNode.png"));
            //icône pour les noeuds parents fermés
            ImageIcon fold4 = new ImageIcon(getClass().getClassLoader().getResource("Pictures/ClosedNode.png"));
            DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
            //test si c'est une feuille
            if(leaf){
                int num = listObjectFileName.indexOf(node.getUserObject().toString());
                if (listObjectIsOn.get(num).toString() == "1") {
                    this.setLeafIcon(fold);
                }
                else {
                    this.setLeafIcon(fold2);
                }
            }
     
            //noeud avec enfants
            if(expanded){
                //Cas du noeud « ouvert »
                this.setOpenIcon(fold4);
            }
            else{
                //Cas du noeud « fermé »
                this.setClosedIcon(fold3);
            }//endif
     
            //on appelle ensuite la classe de base
            super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
            return this;
        }//end getTreeCellRendererComponent
    }//end MyRenderer
    Voilà, si quelqu'un a déjà eu le même problème, çà serait cool qu'il m'en fasse part...


    [EDIT] Je tiens à préciser que même sans icône dans le JTree, celui-ci a vraimant du mal à s'afficher et à se rafraîchir...

  3. #3
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Personne n'aurait une petite idée sur le problème ???
    Parce que je ne vois vraiment pas d'où cela peut venir...

    Je poste le lien pour ceux qui voudraient voir comment se comporte le JTree (sachant que cela ne vient pas du nombre d'éléments, parce que j'ai essayé avec une seul élément et la lenteur était sensiblement la même).

    http://mfrac10.free.fr/Java/HTML%20Multiple2.htm

    Merci d'avance !

  4. #4
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Un petit up, je ne vois vraiment pas comment résoudre ce problème...

Discussions similaires

  1. [debutant][Applet] problèmes insertion applet java
    Par mlequim dans le forum Applets
    Réponses: 5
    Dernier message: 11/07/2005, 09h50
  2. Réponses: 8
    Dernier message: 12/05/2005, 08h16
  3. [CR10][ODBC][XML] problème de lenteur
    Par capitainerotel dans le forum Connectivité
    Réponses: 4
    Dernier message: 09/05/2005, 18h58
  4. Optimiser MS SQL2000 car j'ai des problèmes de lenteurs
    Par djavaux dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 21/04/2004, 10h50

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