bonjour à tous !
j’ai un problème assez urgent.
j’ai un jtree associé à un jpopmenu et lorsque je fais un clic droit sur l’élément sélectionné du jtree, un item nommé “valider” du jpopenu doit etre afficher à droite de l’élément du jtree selectionné.
le pb est qu’il s’affiche à 100000 km de l’élément sélectionné.
Que dois je faire.
please help me!
cheers!
voici un bout de code:
jTree1.addMouseListener(new MouseListener()
{
public void mouseClicked(MouseEvent me)
{
valider.setArmed(true);
if(me.getButton() == MouseEvent.BUTTON3)
{
menudroit.setLocation(me.getX(), me.getY()); //menudroit est mon jpopmenu
menudroit.setLocation(me.getX(), me.getY());
} //endif
} //end mouseClicked
public void mousePressed (MouseEvent e) {}
public void mouseReleased (MouseEvent e) {}
public void mouseEntered (MouseEvent e) {}
public void mouseExited (MouseEvent e) {}
La classe MouseListener est une interface, il faut donc l’implémenter dans une autre classe.
Ta méthode n’est pas très ‘propre’ à mon avis.
Je préfère passer par une autre classe quitte à charger un peu le code.
voici un exemple
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
*
* @author Jiheme
*/
public class Fenetre extends JFrame
{
private JPopupMenu pm;
private JMenuItem mi;
/** Creates a new instance of Fenetre */
public Fenetre() {
}
public void play()
{
//création du popupmenu
pm = new JPopupMenu("Test");
//création du jmenuitem
mi = new JMenuItem("item 1");
//ajout de l'item dans le popup
pm.add(mi);
//définition générale de la fenetre de test
Container cont = getContentPane();
cont.setLayout(new BorderLayout());
JPanel p_fond = new JPanel(new FlowLayout(FlowLayout.CENTER));
JLabel l = new JLabel(new ImageIcon("C:\\temp\\aa.jpg"));
//ajout d'un mouselistener sur mon label
l.addMouseListener(new MouseListening());
//ajout des différents composants de la fenetre
p_fond.add(l,BorderLayout.CENTER);
cont.add(p_fond,BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Test Mouse Listener");
pack();
setVisible(true);
}
public static void main(String[] args)
{
new Fenetre().play();
}
private class MouseListening implements MouseListener
{
public MouseListening()
{}
public void mouseClicked(MouseEvent e)
{
System.out.println("Mouse clicked : "+e.getXOnScreen() + "\t" + e.getYOnScreen());
pm.setLocation(e.getXOnScreen(),e.getYOnScreen());
pm.setVisible(true);
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}
}
j’ai eu le même problème avec getX/getY, car ils ne tiennent pas compte de la position de la fenêtre sur l’écran / position du composant sur l’écran.
(avec aa.jpg, une image quelconque)