Comment creer un jpopupmenu

Signaler
Messages postés
106
Date d'inscription
dimanche 19 mars 2006
Statut
Membre
Dernière intervention
17 janvier 2007
-
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
-
Limaiem heykel
Bonjour,
Je veux ajouter dans ma jliste un JPopupMenu, mais je sait pas la syntaxe exacte pour ca creation et le listenner necessaire pour que le jpopupmenu s'afficher uniquement l'orsque je clique sur une ligne de ma jliste.
Merci de me fournir un petit exemple pour commencer.
A voir également:

13 réponses

Messages postés
358
Date d'inscription
jeudi 24 octobre 2002
Statut
Membre
Dernière intervention
13 avril 2020

voila un exemple

import javax.swing.JList;

import javax.swing.JMenuItem;

import javax.swing.JPopupMenu;

import javax.swing.SwingUtilities;

class DiapoControl extends DiapoVue{

private int courant = 0;

private Modele modele;

private final JPopupMenu popup = new JPopupMenu();

private JMenuItem itemBox1, itemBox2, itemBox3, itemBox4, itemBox5;

DiapoControl() {

itemBox1 = new JMenuItem("copier");

popup.add(itemBox1);

itemBox1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

courant=modele.courant;

modele.copier();

}

});

itemBox2 = new JMenuItem("coller");

popup.add(itemBox2);

itemBox2.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

courant=modele.courant;

modele.coller();

}

});

addMouseListener(new MouseAdapter(){

public void mousePressed(MouseEvent e) {

if (SwingUtilities.isRightMouseButton(e)) {

popup.show(e.getComponent(), e.getX(), e.getY());

}

}

});

}

 
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

en 1.5 tu peux ajouter un jpopupmenu à tout ce qui herite de jcomponent jliste comprise avec cette methode


setComponentPopupMenu
public void setComponentPopupMenu(JPopupMenu popup)

Sets the
JPopupMenu
for this
JComponent
.
The UI is responsible for registering bindings and adding the necessary
listeners such that the
JPopupMenu
will be shown at
the appropriate time. When the
JPopupMenu
is shown
depends upon the look and feel: some may show it on a mouse event,
some may enable a key binding.

If
popup
is null, and
getInheritsPopupMenu

returns true, then
getComponentPopupMenu
will be delegated
to the parent. This provides for a way to make all child components
inherit the popupmenu of the parent.

This is a bound property.

<dd><dl> * Parameters: : <dd>
popup
- - the popup that will be assigned to this component
may be null * Since: : <dd>1.5 * See Also: : <dd>
getComponentPopupMenu()

</dd></dl>

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
106
Date d'inscription
dimanche 19 mars 2006
Statut
Membre
Dernière intervention
17 janvier 2007

Limaiem heykel
bon merci pour votre reponse,
J'ai essayer ce code mais j'ai pas pu associer mon jpopupmenu a ma jlist, le menu fonctione hors ma jlist mais pas ds ma jlist, voici mon code

 private final JPopupMenu popup = new JPopupMenu();
   private JMenuItem itemBox1, itemBox2, itemBox3, itemBox4, itemBox5;
   private int courant = 0;

 itemBox1 = new JMenuItem("copier");

popup.add(itemBox1);

itemBox1.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e) {

       test_clic(e);
    }

});

itemBox2 = new JMenuItem("coller");

popup.add(itemBox2);

itemBox2.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e) {

       test_clic(e);
    }

});

addMouseListener(new MouseAdapter(){

    public void mousePressed(MouseEvent e) {

        if (SwingUtilities.isRightMouseButton(e)) {

            popup.show(jPanel2, e.getX(), e.getY());

        }

    }

});
Merci de me fournir  les modification necessaire pour que mon popup apprait ds ma jlist
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,


rmeplace jPanel2 par le nom de ta JList


popup.show(maJList, e.getX(), e.getY());

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
et le listener retache le a la jlist aussi

maJList.addMouseListener(new MouseAdapter(){

    public void mousePressed(MouseEvent e) {

        if (SwingUtilities.isRightMouseButton(e)) {

             popup.show(maJList, e.getX(), e.getY());

        }


    }

});

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Sinon pour le jdk 1.5 :


private final JPopupMenu popup = new JPopupMenu();

private JMenuItem itemBox1, itemBox2, itemBox3, itemBox4, itemBox5;


itemBox1 = new JMenuItem("copier");

popup.add(itemBox1);

maJList.setComponentPopupMenu(popup);

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
106
Date d'inscription
dimanche 19 mars 2006
Statut
Membre
Dernière intervention
17 janvier 2007

Limaiem heykel
Merci bq votre code fonctionne a merveille.
Je voudrait savoir comment faire pour que l'orsque je clique avec le bouton droit pour faire apparaitre mon jpopupmenu je  selectionne la ligne viser par le curseur, d'une autre facon : comment permettre la selection avec le bouton droit de ma souris en meme temp que le jpopupmenu apparait.
Merci
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

en regardant mieux le code de [auteurdetail.aspx?ID=16895 kaloway]tu aurais trouvé vite fait :
SwingUtilities.isRightMouseButton(MouseEvent e)

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
106
Date d'inscription
dimanche 19 mars 2006
Statut
Membre
Dernière intervention
17 janvier 2007

Limaiem heykel
Justement j'ai exactement suivi  le code de kaloway ce qui fait que : le popupmenu apprait dans la jliste (clic droit) mais l'orsque je clique sur une ligne de ma liste par le bouton droit elle n'est pas selectionner et le popupmenu apparait.
Ce que je veu faire et l'orsque je pointe sur une ligne de ma liste et je clique sur le  bouton droit elle est selectioner et le popupmenu apparait.
Voici mon code pour en verifier mais je doit selectionez une ligne avec le bouton  gauche apres cliquer avec le bouton droit pour faire apparaitre le popupmenu relatif.
Merci pour votre aide
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

ouiais et le code?

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
106
Date d'inscription
dimanche 19 mars 2006
Statut
Membre
Dernière intervention
17 janvier 2007

Limaiem heykel
Je m'excuse j'ai oublier de vous passez le code. le voici

private final static JPopupMenu popup = new JPopupMenu();
   private static JMenuItem itemBox1, itemBox2, itemBox3, itemBox4, itemBox5;

public static void menuPop(){
    itemBox1 = new JMenuItem("Delete Link");
    popup.add(itemBox1);
    itemBox1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
       test_clic(e);
    }});
   itemBox2 = new JMenuItem("test");
   popup.add(itemBox2);
   itemBox2.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
       test_clic(e);
    }});

  desc.addMouseListener(new MouseAdapter(){
    public void mousePressed(MouseEvent e) {
        if (SwingUtilities.isRightMouseButton(e)) {
             popup.show(desc, e.getX(), e.getY());
        }

    }
});

  }
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

voici un exemple de ce que tu pourrais faire:

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;

public class Test extends JFrame implements ActionListener, MouseListener {
    private static final long    serialVersionUID    = 1L;
    private JPopupMenu            popup                = null;
    private JMenuItem            itemBox1            = null;
    private JMenuItem            itemBox2            = null;
    private JList                list                = null;
   
   
    public static void main(String [] args){
        new Test().setVisible(true);
    }
   
    public Test(){
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(new Dimension(300, 300));
        setLocationRelativeTo(null);
        setContentPane(new JScrollPane(getList()));
    }
   
    public JMenuItem getItemBox1(){
        if(itemBox1 == null){
            itemBox1 = new JMenuItem();
            itemBox1.setText("Delete Link");
            itemBox1.addActionListener(this);
        }
        return itemBox1;
    }
   
    public JMenuItem getItemBox2(){
        if(itemBox2 == null){
            itemBox2 = new JMenuItem();
            itemBox2.setText("test");
            itemBox2.addActionListener(this);
        }
        return itemBox2;
    }
   
    public JPopupMenu getPopupMenu(){
        if(popup == null){
            popup = new JPopupMenu();
            popup.add(getItemBox1());
            popup.add(getItemBox2());
        }
        return popup;
    }
   
    public JList getList(){
        if(list == null){
            list = new JList();
            DefaultListModel model = new DefaultListModel();
            for(int i = 0; i < 10; i++)
                model.addElement("Test" + i);
            list.setModel(model);
            list.addMouseListener(this);
        }
        return list;
    }
   
    public void actionPerformed(ActionEvent e) {
        if(e.getSource().equals(getItemBox1())){
            System.err.println("ItemBox1 = " + getList().getSelectedValue());
            getList().clearSelection();
        }else if(e.getSource().equals(getItemBox2())){
            System.err.println("ItemBox2 = " + getList().getSelectedValue());
            getList().clearSelection();
        }
    }

    public void mouseClicked(MouseEvent e) {
        if(e.getSource().equals(getList())){
            Object selection = getList().getSelectedValue();
            System.out.println(selection);
            if(selection != null){
                if (SwingUtilities.isRightMouseButton(e)) {
                     getPopupMenu().show(getList(), e.getX(), e.getY());
                }
            }
           
        }
       
    }

    public void mouseEntered(MouseEvent e) { }
    public void mouseExited(MouseEvent e) { }
    public void mousePressed(MouseEvent e) { }
    public void mouseReleased(MouseEvent e) { }

}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Oui j'oublié oublie les static a tout va c'est plus une cause d'erreur qu'autre chose de plus le static n'est a utiliser que si l'on à vraiment pas le choix ou que l'on veut partager un meme comportement entre plusieurs instance d'un meme objet

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA