JPopupMenu et Event non levé

cocomineo Messages postés 4 Date d'inscription vendredi 16 février 2007 Statut Membre Dernière intervention 9 octobre 2009 - 31 août 2009 à 10:37
jennydjen Messages postés 11 Date d'inscription mercredi 16 décembre 2009 Statut Membre Dernière intervention 12 janvier 2011 - 16 déc. 2009 à 16:07
Bonjour à tous !
Voici mon problème :

J'ai une JDialog qui affiche un JPopupMenu lors d' un click droit sur son panel qui recupere les coordonnées de l'endroit clické ( important pour mon projet ).
Or comme vous pouvez le constater si vous testez ce bout de code, dès que je clic une premiere fois, le popup s'affiche correctement à la position indiquée, lors d'un second clic le popup s'affiche au même endroit.

import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.AbstractAction;
import javax.swing.JDialog;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;


public class Tests extends JDialog{

JPopupMenu pop ;
int tempX , tempY;

public Tests(){
super();
pop = new JPopupMenu() ;
JMenuItem menu = new JMenuItem(new AbstractAction("pop") {

@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("blabal");

}
});
menu.setArmed(true);

pop.add(menu);

this.getContentPane().addMouseListener(new MouseAdapter() {

@Override
public void mouseReleased(MouseEvent arg0) {
pop.show(Tests.this, tempX, tempY);
}

@Override
public void mousePressed(MouseEvent arg0) {
tempX = arg0.getX();
tempY = arg0.getY();
}

@Override
public void mouseClicked(MouseEvent arg0) {
//				tempX = arg0.getX();
//				tempY = arg0.getY();
//				pop.show(Tests.this, tempX, tempY);
}
});
}

public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

Tests t = new Tests();
t.setVisible(true);
}

}






Mon tuteur de stage n'arrive pas a faire un simple clic, sa souris se deplace entre la pression et le relachement du bouton.
Ce qui correspond à un mousePressed puis à un mouseReleased. Et il m'as aussi demandé de garder l'apparence de l'OS ( d'ou le getSystemLookandFeel...)

Ce que je ne comprends pas , c' est :
- pourquoi le bout de code placé entre commentaire dans le mouseClicked fonctionne sur un clic précis ( sans Drag ) et ne fonctionne pas lorqu'on le decompose en 2parties ( mousePressed et MouseReleased )
- pourquoi ce bout de code marche parfaitement lorsque je desactive le look de mon OS ( Windows Vista ).

Si quelqu'un pouvait me donner une solution à mon problème et surtout m'eclairer sur ce phénomène, j'ai eu beau chercher sur internet, dans la doc , modifier la modalité des composants , me pencher sur le LightWeight et HeavyWeight.

Je n'ai absolument rien trouvé !

Merci d'avance

1 réponse

jennydjen Messages postés 11 Date d'inscription mercredi 16 décembre 2009 Statut Membre Dernière intervention 12 janvier 2011
16 déc. 2009 à 16:07
Bonjour,

Je pense que tu as sûrement trouvé la réponse.

Je pense que tu aurais pu directement afficher ton MenuPopup dans le MouseListener : le X et Y te seront donnés a chaque fois que tu fais un clic.

Bonne journée.
0
Rejoignez-nous