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 :

[débutant][JMenuItem] clone() : Méthode invisible


Sujet :

AWT/Swing Java

  1. #1
    Membre expérimenté
    Avatar de lejimi
    Homme Profil pro
    Écrivain public
    Inscrit en
    Mai 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Écrivain public
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2004
    Messages : 182
    Billets dans le blog
    2
    Par défaut [débutant][JMenuItem] clone() : Méthode invisible
    Bonjour,

    dans une application, j'ai un JMenu qui contient des JMenuItem et j'aimerais avoir les mêmes JMenuItem dans un JPopupMenu. Pour ce faire je cherche à faire une copie profonde de ces JMenuItem, ce qui m'évitera la demi-douzaine de lignes de code nécessaire au paramétrage de chacun d'eux. J'utilise donc ceci (ou plutôt j'essaye...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JMenuItem genOpen=(JMenuItem) open.clone();
    Malheureusement Eclipse me signale que clone() est "invisible" et je n'arrive pas à comprendre ce qui se passe. Je précise que cet appel se situe au sein d'une méthode private et que open est un private JMenuItem Qu'est-ce qui ne va pas ? C'est certainement une histoire de droit d'accès, mais je sèche... JMenuItem hérite d'Object, il devrait donc pouvoir accéder à protected clone()

    Merci

    LJM.


    [edit] J'ai fini par trouver ! JMenuItem n'implémente pas l'interface Cloneable qui est nécessaire pour pouvoir appeler clone() Je suppose que si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonMenuItem extends JMenuItem implements Cloneable{...}
    ça ne marchera pas non plus car si certaines classes n'implémentent pas cette interface, c'est apparemment parce-que la méthode clone() renvoie de résultats abérants quand elle leur est appliquée. Ca va cloner, mais il y aura des altération génétiques et l'objet retourné sera inutilisable.

    Ceci dit je suis toujours preneur s'il y a moyen de créer ce second menu sans taper la palanquée de lignes nécessaire au paramétrage de tous les JMenuItem qu'il contient.

    LJM.
    Gloire à qui n'ayant pas d'idéal sacro-saint
    Se borne à ne pas trop emmerder ses voisins.


    Mon tutoriel pour débuter avec Inkscape
    D'autres tutoriels intéressants dans la rubrique Open Source
    Et n'oubliez pas la FAQ Open Source !

  2. #2
    Membre expérimenté
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Par défaut
    Je pense que c'est à toi de surcharger la méthode clone dans MonJMenuItem.
    Elle contiendra la fameuse demi-douzaine de lignes de code que tu veux éviter, mais en faisant ainsi tu ne la taperas qu'une seule fois, après tu pourra cloner tous les items de ton menu.

    T'as compris ce que je voulais dire ? Ca marche ?

    Strab

  3. #3
    Membre expérimenté
    Avatar de lejimi
    Homme Profil pro
    Écrivain public
    Inscrit en
    Mai 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Écrivain public
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2004
    Messages : 182
    Billets dans le blog
    2
    Par défaut
    Oui, en fait, c'est ce que je me suis résolu à faire, mis à part que j'ai préférer créer une méthode statique dans une classe spéciale qui me sert à stocker ce genre de routines "anti-dactylographiage". Ca marche au petit poil. Si ça peut dépanner quelqu'un voici le code :

    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
    package fr.sam.util;
     
    import java.awt.event.ActionListener;
    import java.util.EventListener;
     
    import javax.swing.JMenuItem;
     
    /**
     * Une classe dont les méthode servent à éviter de taper des montagnes de code
     * 
     * @author Mézigue
     *
     */
    public class CodeShortCuts {
     
     
        /**
         * Renvoie une copie champ pour champ d'un JMenuItem fourni en argument.
         * Le JMenuItem est retourné avec l'ensemble de ses listeners
         * @param oldItem
         * @return
         */
        static public JMenuItem copyMenuItem(JMenuItem oldItem){
            newItem=new JMenuItem(oldItem.getText());
            newItem.setActionCommand(oldItem.getActionCommand());
            newItem.setMnemonic(oldItem.getMnemonic());
            newItem.setAccelerator(oldItem.getAccelerator());
            newItem.setPreferredSize(oldItem.getPreferredSize());
            ActionListener[]listeners=oldItem.getActionListeners();
            for(int i=0;i<listeners.length;i++){
                newItem.addActionListener(listeners[i]);
            }
            return newItem;
        }
     
        public static void main(String[] args) {
        }
     
        private static JMenuItem newItem;
    }

    Dériver JMenuItem et surcharger clone() je n'ai pas essayé, mais je ne vois aucune raison pour que ça ne marche pas.
    Gloire à qui n'ayant pas d'idéal sacro-saint
    Se borne à ne pas trop emmerder ses voisins.


    Mon tutoriel pour débuter avec Inkscape
    D'autres tutoriels intéressants dans la rubrique Open Source
    Et n'oubliez pas la FAQ Open Source !

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

Discussions similaires

  1. débutant: class et méthode
    Par hesoebius dans le forum Langage
    Réponses: 6
    Dernier message: 12/04/2007, 08h53
  2. [débutant] Réflexion sur méthode
    Par dahtah dans le forum Langage
    Réponses: 8
    Dernier message: 02/04/2007, 16h29
  3. débutant accès aux méthodes
    Par gabest dans le forum Visual C++
    Réponses: 1
    Dernier message: 02/03/2007, 18h23
  4. [débutant] Class et Méthodes
    Par abbd dans le forum C#
    Réponses: 5
    Dernier message: 24/02/2007, 19h15
  5. Débutante - Pb appel méthode static
    Par nmetais dans le forum Langage
    Réponses: 2
    Dernier message: 23/09/2005, 17h23

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