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

Composants Java Discussion :

[JTable][ListSelectionModel] click droit


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Par défaut [JTable][ListSelectionModel] click droit
    Bonjour,

    J'ai une table à la quelle je souhaiterai ajouter une action lors d'un click droit de la souris. J'ai regardé les possibilités de la class ListSelectionModel mais il n'y a rien pour un click droit (ni double click d'ailleur).
    D'après ce que j'ai vu sur le net, il faudrai que je mette un mouseadapter.
    Est ce que vous confirmez qu'il y a que cette solution ?

    Merci d'avnce
    bonne journée

  2. #2
    Membre émérite
    Avatar de n!co
    Profil pro
    Inscrit en
    Février 2004
    Messages
    831
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 831
    Par défaut
    Un ListSelectionListener permet d'ecouter les évènements sur la selection d'un ou plusieurs elements de la liste et donc du ListSelectionModel.
    Dans ton cas, tu cherches a écouter une action de la souris sur ton composant graphique, alors c'est bien le MouseListener qui faut utiliser, ou le MouseAdapter pour n'écrire que les méthodes qui t'intéresse.

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Par défaut
    Bonsoir,

    Merci de ta réponse. Mais il y a quelques points qui restent obscures.
    En effet, comment je peux lier l'action de ma souris à la ligne selectionnée.
    Car en utilisant ListSelectedModel et en y ajoutant un listener, je réccupère la ligne selectionnée. Hors cela me semble marcher que sur click droit.
    Donc mon problème serai de réccupérer la ligne sélectionnée par la souris.

    Merci.

  4. #4
    Membre émérite
    Avatar de n!co
    Profil pro
    Inscrit en
    Février 2004
    Messages
    831
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 831
    Par défaut
    Soyons clair sur un point, les listeners sont la pour écouter les actions que tu as déclaré.
    Dans ton cas, tu veux executer l'opération d'ouvrir une popup sur l'action du clic droit de ta souris. Bien que tu es besoin de récupérer le contenu de ta selection, c'est les evenements sur ta souris que tu écoutes et non un changement de ta selection.

    Donc ok, tu ajoutes un listener à ta table sur les evenements de ton clic droit. Ayant besoin des données contenues dans la ligne où tu as cliqué (mais non selectionnée car Jtable ne le prend pas en compte), il faut que tu mettes à jour ta selection des la première opération. Pour cela j'ai vu que certains simulaient un clic gauche dans l'evenement du clic droit (ici), je ne sais pas si il y a mieux. Tu peux donc maintenant lire ta ligne à partir de ton ListSelectionModel et afficher la popup en concequence.

    Je ne l'ai pas encore fait, d'ailleurs faut que je le fasse dans mon appli, mais ca devrait marcher comme cela.
    D'ailleur si qqn a une autre solution pour mettre à jour la selection sur un clic droit je suis prenneur. J'ai regarder à mettre a jour la selection en reprennant les coordonnées relatives du mouseEvent, mais ce devenais compliqué, la solution de la simulation du clic gauche est surement la plus simple.

    Nico

  5. #5
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut
    Salut, dans le prog que je développe en ce moment j'ai eu le même soucis. Pour y résoudre, je me suis fait un petit listener perso :

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    import java.awt.AWTException;
    import java.awt.Robot;
    import java.awt.event.InputEvent;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
     
    import javax.swing.JPopupMenu;
    import javax.swing.JTable;
    import javax.swing.SwingUtilities;
     
    /**
     * Listener pour un JPopupMenu sur une JTable
     * 
     * @author schniouf
     * 
     */
    public class PopupTableListener extends MouseAdapter
    {
     
     
    	/** Le tableau */
    	private JTable table;
     
    	/** Le popup menu */
    	private JPopupMenu popup;
     
    	/**
             * 
             * @param table
             * @param popup
             */
    	public PopupTableListener(JTable table, JPopupMenu popup)
    	{
    		super();
    		this.table = table;
    		this.popup = popup;
    	}
     
    	/**
             * Méthode appelée à l'enfoncement d'un bouton de la souris
             */
    	public void mousePressed(MouseEvent e)
    	{
    		// S'il s'agit d'un clic droit, on simule un clic gauche
    		// pour sélectionner l'élément situé sous la souris
    		if (SwingUtilities.isRightMouseButton( e )) 
    		{
    			Robot r;
    			try {
    				r = new Robot();
    				r.mousePress( InputEvent.BUTTON1_MASK );
    				r.mouseRelease( InputEvent.BUTTON1_MASK );
    			} catch (AWTException e1) {
    				e1.printStackTrace();
    			}
    		}
    	}
     
    	/**
             * Méthode appelée au relâchement d'un bouton de la souris
             */
    	public void mouseReleased(MouseEvent e)
    	{
    		if (e.isPopupTrigger()) // Si c'est un clic pour afficher un popup menu
    		{
    			// On n'affiche le popup que si un élément est sélectionné
    			if (table.getSelectedRow() >= 0)
    				popup.show( table, e.getX(), e.getY() );
    		}
    	}
     
    	public JPopupMenu getPopup()
    	{
    		return popup;
    	}
     
    	public void setPopup(JPopupMenu popup)
    	{
    		this.popup = popup;
    	}
     
    	public JTable getTable()
    	{
    		return table;
    	}
     
    	public void setList(JTable table)
    	{
    		this.table = table;
    	}
     
    }
    Le listener n'apparait pas si le clic droit a été fait en dehors d'une ligne du tableau.
    Après, pour faire une action en fonction de la ligne cliquée, tu récupères le numéro de la ligne avec jtable.getSelectedRow() dans le actionListener d'un élément de ton popup, et voilà !

    Si ca t'intéresse, j'en ai fait une autre version pour une JList et une pour un JTree, qui fonctionne sur le même principe.

    ++

  6. #6
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Par défaut
    Salut et merci,

    Si je comprends bien la situation je peux utiliser le click gauche et le double click droit. Et l'utilisation du simple click droit devient réservé pour connaître la ligne de la table sélectionnée.
    J'ai regardé dans la doc. java s'il existait un autre listener attaché à Jtable permettant de connaître sans click la ligne sur laquelle est souris, un peu comme pour les Jlist. Mais je n'ai rien vu de tel.
    Est-ce que vous seriez au courant d'un tel listener sur Jtable ?

    Dans tous les cas encore merci et bonne journée.

  7. #7
    Membre confirmé Avatar de Kevin12
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 122
    Par défaut
    Citation Envoyé par schniouf Voir le message

    Le listener n'apparait pas si le clic droit a été fait en dehors d'une ligne du tableau.
    Après, pour faire une action en fonction de la ligne cliquée, tu récupères le numéro de la ligne avec jtable.getSelectedRow() dans le actionListener d'un élément de ton popup, et voilà !

    Si ca t'intéresse, j'en ai fait une autre version pour une JList et une pour un JTree, qui fonctionne sur le même principe.

    ++
    Tu ne peux pas savoir combien ton code m'a aidé à gagner du temps. Si tu as une chose pareille pour JList je serais prêt à m'en servir.

    Bravo !

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

Discussions similaires

  1. [C#] [TreeView] [contextMenu] selection sur un click droit
    Par weejungle dans le forum Windows Forms
    Réponses: 25
    Dernier message: 03/08/2009, 11h52
  2. Event Click droit sur ComboBox
    Par AF_STjohn dans le forum C++Builder
    Réponses: 8
    Dernier message: 29/04/2005, 11h48
  3. selection par click droit
    Par mecocha dans le forum MFC
    Réponses: 2
    Dernier message: 22/12/2004, 22h35
  4. besoin d aide evenement click droit
    Par yuvino dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/12/2004, 10h32
  5. [JSP][Javascript] click droit sur un lien
    Par Stessy dans le forum Servlets/JSP
    Réponses: 22
    Dernier message: 24/09/2004, 10h14

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