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 :

Utilisation de setComponentPopupMenu (JDK 1.5 (Tiger))


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Par défaut Utilisation de setComponentPopupMenu (JDK 1.5 (Tiger))
    Bonjour,

    Pour une IHM en SWING je voudrais faire un PopUp d'Help qui se déclanche sur via un clic droit sue l’icône Help.
    Depuis la version J2SE 1.5 (Tiger) de JAVA, les Component SWING possèdent la méthode setComponentPopupMenu. Je voudrais utiliser cette méthode plutôt que la manière JAVA 4 avec les Listeners et le Popup.show.

    Je précise que je débute en SWING.


    Mon Problème est que je ne suis plus maître de l’événement déclencheur du PopUp. Par défaut dans mon application il ne se lance que sur le clic droit. Je voudrais qu’il se lance avec le clic gauche.


    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
     
          /*******************************************************************************************************************************************************************************************************************************************************************************************************
    * Return a JPanel containing an Help icon
     * 
     * @return the value to be displayed
     */
    protected JPanel getHelp() {
    		JPanel res = new JPanel();
    		JLabel iconHelp = new JLabel(getHelpIcon());
    		iconHelp.setComponentPopupMenu(getHelpPopup());
    		res.add(iconHelp);
    		return res;
    	}
     
    	/*******************************************************************************************************************************************************************************************************************************************************************************************************
             * Create A JPopupMenu that shows up by clicking on the help icon The JPopup contains a JViewer which allows to display HMTL
             * 
             * @return the JPopup
             */
    	protected JPopupMenu getHelpPopup() {
    		String help = GenericUtils.getHelp(theProperty.getHelp(), theProperty.getId(), getLocale());
    		JPopupMenu res = new JPopupMenu(GenericUtils.getValue("label.help", getLocale()));
    		JEditorPane viewer = new JEditorPane("text/html", help);
    		viewer.setEditable(false);
    		res.add(viewer);
    		res.setInheritsPopupMenu(true);
    		return res;
    	}


    http://www-128.ibm.com/developerwork...124/index.html
    Il est indiqué :
    With Tiger, the triggering of the popup menu is now part of the UI definition of the component. And, if that component UI wants to have a triggering event like a key click, the changes stay focused within the UI definition, not in all the uses of that popup menu.
    Sur un autre site : http://www.jguru.com/forums/view.jsp?EID=1239349 J’ai trouvé un post contradictoire :
    JDK 1.5 adds the setComponentPopupMenu method to JComponent, but if this method is used to add a popup menu to a JPanel, a right mouse click does nothing. Adding a do nothing MouseListener to the panel makes the popup come alive. This behaviour seems counter intuitive.
    Is this a bug, or is there a another more logical way to indicate that the panel should handle popup events?
    Using the setInheritsPopupMenu on a JComponent added to the panel does make that component display the inherited menu.
    In the example that follows, only panelA shows the popup, because it is the one with the added empty MouseListener.

    Pour déclancher l’apparition du PopUp non pas sur le clic droit mais sur le clic gauche.
    Dois-je :
    • Créer des Listener vides
    • Changer L’UI ? Comment ?
    • Autre?


    Notez enfin qu’il existe un BUG JAVA lié à ce problème :
    http://bugs.sun.com/bugdatabase/view...bug_id=6272233
    Je ne pense pas que ça soit un problème car mon PopUp s’affiche.


    Merci d’avance si vous avez une réponse ou un tutorial correct (pas trouvé) pour utiliser complètement cette nouvelle fonctionnalité de JAVA 5.

    Damien

  2. #2
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    http://jmdoudoux.developpez.com/cours/developpons/java/

    va voir section 14.9.3 je crois ... c'est sur JPopUpMenu et c'est très bien expliqué

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Par défaut
    Merci pour le lien...Malheureusement ce n'est pas ce que je cherche.
    Ce tutorial est basé sur les version précédentes 1.4 et utilise les Listeners et la méthode showPopup.
    Pour afficher un menu flottant, il faut ajouter un listener sur l'événement déclanchant et utiliser la méthode show() de la classe JPopupMenu.
    Je voudrais justement éviter cette méthode et utiliser les features du JDK 1.5.
    Ceci dit je me rabattrai sur cette solution si je ne trouve pas de solution.
    Mais encore une fois je voudrais l'éviter

    Enfin je rajoute un lien vers une discussion qui explique bien le même problème avec le JDK 1.5.

    http://forum.java.sun.com/thread.jsp...sageID=4436383
    The official Javadocs are unfortunately not very informative. Anyway, with setComponentPopupMenu you basically delegate to the component's UI delegate to decide what constitutes a popup trigger event. By default this will be a right-click on most platforms.

  4. #4
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    Ce tutorial est basé sur les version précédentes 1.4 et utilise les Listeners et la méthode showPopup
    ceres je n'avais pas fait attention à ça
    si tu trouve une solution en tous cas merci de me tenir au courant merci

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Par défaut
    Après avoir regardé pas mal sur Internet je recentre le problème.

    C'est effectivement l'UI de mon JLabel qui est en charge de savoir quel événement ouvre le PopUp.
    Par défaut c'est le clic droit.
    Je voudrais juste ajouter le clic gauche comme événement a cet UI.

    comment faire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    (pseudo code)
    myLabel.getUI().laMethodeQuigerelesEvents(...)
    Ou bien même (et là ça m'inquiète) en changeant directement le comportement dans le Look and Feel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UIManager.put(xxx,yyy);
    Ou autre ?

    Si il y a des spécialistes des Look and Feel UI qui connaissent j'en serais très reconnaissant.

    Merci

    Damien

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Par défaut
    Je relance une piste sur laquelle je suis désormais.

    Le popup est déclanché si l'événement a l'attribut
    PopUPTrigger = True.

    Je cherche donc a savoir comment changer la valeur PopupTrigger pour l'événement clic droit (Via l'UI?).

    Si ça donne une idée a quelqu'un j'en suis preneur.

    Merci

    Damien

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/01/2012, 17h26
  2. Forcer weblogic à utiliser ORB de jdk
    Par Lolitaaa dans le forum CORBA
    Réponses: 2
    Dernier message: 04/01/2010, 10h46
  3. Réponses: 165
    Dernier message: 03/09/2009, 15h35
  4. Forcer l'utilisation d'un JDK particulier
    Par c0rt0 dans le forum ANT
    Réponses: 1
    Dernier message: 06/08/2009, 10h10
  5. [swig] utilisation de ld sous mac osX tiger.
    Par PyBio dans le forum Interfaçage autre langage
    Réponses: 3
    Dernier message: 26/10/2005, 17h51

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