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 :

Problème positionnement de mon JPopupMenu


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème positionnement de mon JPopupMenu
    Bonjour,

    Alors voilà j'ai un problème avec mon JPopupMenu.
    J'ai une JFrame qui ouvre différentes JInternalFrame. Lorsque je click sur l'un de mes menu (dans un menuBar) de ma JFrame, celle-ci m'ouvre une JInternalFrame dans laquelle se trouve des JList et quelques boutons. J'ai voulu tester un JPopupMenu sur une JList. Seulement mon problème c'est que lorsque je fais un click droit sur un élément de ma JList sur lequel j'ai mis mon JPopupMenu, celui-ci apparaît comme si ma JList et la souris étaient situées tout en haut à gauche de l'écran, résultat, il n'apparaît pas là où est réellement ma souris...
    Savez-vous d'ou cela peut venir ?
    Au passage, quand je fais un click droit il ne me sélectionne pas l'item comme avec un click gauche. Une solution ?

    Voici le code (il n'est pas entier, juste les parties qui nous intéressent):
    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
    private JScrollPane getJScrollPaneAdmin() {
    		if (jScrollPaneAdmin == null) {
    			jScrollPaneAdmin = new JScrollPane();
    			jScrollPaneAdmin.setBounds(new Rectangle(53, 45, 192, 316));
    			jScrollPaneAdmin.setViewportView(getJListAdmins());
    		}
    		return jScrollPaneAdmin;
    	}
     
    private JList getJListAdmins() {
    		if (jListAdmins == null) {
    			String[] data = { "Test1", "Test2", "Test3" };
    			jListAdmins = new JList(data);
    			jListAdmins.setAutoscrolls(true);
    			jListAdmins.addMouseListener(new java.awt.event.MouseAdapter() {
    				public void mousePressed(java.awt.event.MouseEvent e) {
    					if (e.getButton() == 3) {
    		    			System.out.println("pressed");
    		    			getJPopupMenu();
    		    			jPopupMenu.setLocation(e.getX(), e.getY());
    		    			jPopupMenu.setVisible(true);}
    				}
    			});
    		}
    		return jListAdmins;
    	}
     
    private JPopupMenu getJPopupMenu() {
    		if (jPopupMenu == null) {
    			jPopupMenu = new JPopupMenu();
    			jPopupMenu.setVisible(true);
    			jPopupMenu.add(getJMenuItemDetails());
    		}
    		return jPopupMenu;
    	}
     
    private JMenuItem getJMenuItemDetails() {
    		if (jMenuItemDetails == null) {
    			jMenuItemDetails = new JMenuItem("Test");
    			System.out.println("Blablabla"); 
    		}
    		return jMenuItemDetails;
    	}

  2. #2
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Alors voilà un petit bout de code qui devrait t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (e.isPopupTrigger()) {
       mouseMenu.show(jListAdmins, e.getX(), e.getY());
    }
    Pour info, permet de savoir si l'évènement est censé afficher un popupMenu ou pas car suivant l'OS c'est sur le mousePressed ou sur le mouseReleased.
    Il faut donc implémenter la même méthode dans les 2 méthodes (mousePressed() et mouseReleased()) de ton actionListener.

    Ensuite voici la définition de la méthode show() dans la Javadoc :
    show(Component invoker, int x, int y)
    Displays the popup menu at the position x,y in the coordinate space of the component invoker.
    Normalement ça devrait mieux marcher.

    PS : tu fais 2 fois du setVisible() de ton menu : une fois dans getJPopupMenu() et une autre fois dans mousePressed(). En général quand on utilise cette méthode il ne faut le fauire qu'une seule fois, et là avec la méthode show() tu n'en as plus besoin...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Parfait merci beaucoup

    Par contre, comment faire pour que lorsque je fasse un click droit sur un item, ça le sélectionne et après ça ouvre le popupmenu et que ça ne puisse ouvrir le popupmenu seulement si je fais le click droit sur l'item car pour le moment le menu apparaît n'importe où je click dans la JList?

  4. #4
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Bonne question.

    Tu dois pouvoir utiliser setSelectedIndex(int index) et locationToIndex(Point location) pour spécifier quel élément doit être sélectionné lors du clic droit.

    Regarde la doc de locationToIndex(Point location) afin de savoir si tu peux afficher ou non ton menu.

  5. #5
    Invité
    Invité(e)
    Par défaut
    T'es magique seiryujay

    Merci.

  6. #6
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Citation Envoyé par nicofromChina
    T'es magique seiryujay

    Merci.
    On me le dit souvent

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

Discussions similaires

  1. [VB6]problèmes pour executer mon projet en VB
    Par Walowalo dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 29/04/2006, 19h27
  2. Problème positionnement absolu
    Par finalfx dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 20/04/2006, 15h47
  3. problème positionnement CSS
    Par Mike35 dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 24/02/2006, 10h38

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