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);