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 :

Affichage JPopupMenu sur clique droit


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut Affichage JPopupMenu sur clique droit
    Bonjour,

    j'ai fait un jpopmenu pour que lorsqu'on clique droit sur une ligne de ma table il propose un menu contextuel, le menu contextuel s'affiche, me propose mon menu, si je clique l'action s'exécute... sauf qu'un fois que l'action s'est exécutée si je refait un clique droit sur une ligne j'ai ce message d'erreur :

    Exception in thread "AWT-EventQueue-0" java.awt.IllegalComponentStateException: component must be showing on the screen to determine its location
    at java.awt.Component.getLocationOnScreen_NoTreeLock(Unknown Source)
    at java.awt.Component.getLocationOnScreen(Unknown Source)
    at javax.swing.JPopupMenu.show(Unknown Source)
    at com.monsite.ihm.FrameRemiseDeCheques$1.mouseClicked(FrameRemiseDeCheques.java:136)
    at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    Sinon pour la partie 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
    41
    42
    43
    44
    45
    46
    		//met le mouse listener pour supprimer des lignes du tableau
    		tableRemise.addMouseListener(new MouseListener(){
    			public void mouseClicked(MouseEvent arg) {
    				JPopupMenu menuContextuel = new JPopupMenu();
    				//sur le clique droit propose un menu contextuel
    				//pour supprimer la ligne selectionnée
    				if (arg.getButton()==3){
    					//recup la ligne cliquée
    					Point position = arg.getPoint();
    					final int ligne = tableRemise.rowAtPoint(position);
    					int xposition = position.x;
    					int yposition = position.y;
    					//vire les lignes selectionnée
    					tableRemise.getSelectionModel().clearSelection();
    					//selectionne la ligne sur laquelle l'utilisateur à cliqué
    					tableRemise.getSelectionModel().addSelectionInterval(ligne,ligne);
     
    					//affiche le menu contextuelle
    					AbstractAction supprligne = new AbstractAction("Supprimer la ligne"){
    						public void actionPerformed(ActionEvent arg0){
    							((RemiseEnBanqueTableModel) tableRemise.getModel()).removeRow(ligne);
    							razlapage();//rafraichie la page et lance des controles							
    						}
    					};
     
    					JMenuItem supp = new JMenuItem();
    					supp.setAction(supprligne);
     
    					menuContextuel.add(supp);
    					menuContextuel.show(tableRemise,xposition,yposition);
    				}
    			}
     
    			public void mousePressed(MouseEvent arg0) {
    			}
     
    			public void mouseReleased(MouseEvent arg0) {
    			}
     
    			public void mouseEntered(MouseEvent arg0) {
    			}
     
    			public void mouseExited(MouseEvent arg0) {
    			}
     
    		});
    La ligne 136 du message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    menuContextuel.show(tableRemise,xposition,yposition);

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 238
    Points : 267
    Points
    267
    Par défaut
    Salut,

    Je pense que l'erreur vient du faite que tu utilise ton JPopupMenu dans l'action, ce qui oblige à le garder quelque part puisque l'action arrive n'importe quand. Or dans ton action tu lui dit de disparaitre (setEnabled(false)), donc à l'appel suivant comme il n'est pas visible tu as l'erreur.

    Dans ton action tu n'a pas besoin de faire un setEnabled(false) sur le Menu, celui ci disparait des qu'une action est effectuée ou alors un clic ailleurs.
    Enlève cet appel et tu pourra enlever le final devant la déclaration de ton JPopupMenu.

    a+

  3. #3
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    Enlève cet appel et tu pourra enlever le final devant la déclaration de ton JPopupMenu.
    à l'origine je n'avais pas setEnabled(false) et mon jpopmenu n'était pas en final.... mais j'avais l'erreur.
    C'est après des tests à droite et à gauche que j'ai fait, j'ai oublié de tout remettre comme avant.
    Donc d'origine j'ai l'erreur, par contre j'ai trouvé d'ou ca viens, c'est ma méthode razlapage.. qui vide ma table et la remplie, parce que je n'arrive pas a faire fonctionner les fire... sur les tables

    je suis du genre à utiliser des méthodes de barbare quand je comprends pas un truc....

    Je suis en train de lire de la doc pour comprendre les fire.. sur les tables, vu que je n'ai plus le choix.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 238
    Points : 267
    Points
    267
    Par défaut
    Salut,

    Tiens si tu veux un excellent tutoriel sur les JTable et autres composants 'complexe' : tutoriel

    Voilà j'espère que ca te sera utile.

    a+

  5. #5
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    Merci



    par contre 139 pages sans sommaire....

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

Discussions similaires

  1. affichage text sur clique radio
    Par gazelle dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/10/2007, 20h01
  2. Réponses: 5
    Dernier message: 30/11/2006, 08h32
  3. menu sur clique droit
    Par pigpen dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 25/04/2006, 10h58
  4. Ajout de menu perso sur clique droit de la souris !!
    Par Kyp dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/12/2005, 17h06
  5. [VB6] menu contextuel sur clique droit souris
    Par da40 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 08/07/2003, 11h07

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