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] Affichage d'un popup sur un JTable vide.


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [JTable] Affichage d'un popup sur un JTable vide.
    Bonjour,

    J'ai besoin d'afficher un JPopupMenu sur une JTable même lorsque celle-ci est vide. Pour y arriver, j'ai surchargé la méthode configureEnclosingScrollPane() de ma JTable :
    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
    @Override
    	protected void configureEnclosingScrollPane() {
    		super.configureEnclosingScrollPane();
    		Container container = getParent();
    		if ( container instanceof JViewport ) {
    			JViewport viewport = (JViewport) container;
    			viewport.addMouseListener(new MouseAdapter(){
    				@Override
    				public void mouseClicked(MouseEvent e) {
    					Component source = (Component) e.getSource();
    					MouseEvent evt = SwingUtilities
    						.convertMouseEvent(source, e, JTableClickable.this);
    					for (MouseListener l : getListeners(MouseListener.class) ) {
    						l.mouseClicked(evt);
     
    					}
    				}
    				@Override
    				public void mousePressed(MouseEvent e) {
    					Component source = (Component) e.getSource();
    					MouseEvent evt = SwingUtilities
    						.convertMouseEvent(source, e, JTableClickable.this);
    					for (MouseListener l : getListeners(MouseListener.class) ) {
    						l.mousePressed(evt);
    					}
    				}
     
    				@Override
    				public void mouseReleased(MouseEvent e) {
    					Component source = (Component) e.getSource();
    					MouseEvent evt = SwingUtilities
    						.convertMouseEvent(source, e, JTableClickable.this);
    					for (MouseListener l : getListeners(MouseListener.class) ) {
    						l.mouseReleased(evt);
    					}
    				}
    			});
    		}	
    	}
    J'ai ensuite placé le listener suivant sur ma JTable :
    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
    private class InternalTablePopupListener extends MouseAdapter {
     
    		private JPopupMenu popup;
     
    		public InternalTablePopupListener() {
    			popup = new JPopupMenu();
    			popup.add(new AbstractAction("Say plop"){
     
    				@Override
    				public void actionPerformed(ActionEvent e) {
    					System.out.println("PLOP");
     
    				}
    			});
    		}
     
    		@Override
    		public void mousePressed(MouseEvent e) {
    			maybeShowPopup(e);
    		}
     
    		@Override
    		public void mouseReleased(MouseEvent e) {
    			maybeShowPopup(e);
    		}
     
    		protected void maybeShowPopup(MouseEvent e) {
    			System.out.println("maybeShowPopup : "+e.isPopupTrigger());
    			if ( e.isPopupTrigger() ) {
    				popup.setLocation(e.getLocationOnScreen());
    				popup.setVisible(true);
    			}
    		}
    	}
    Je récupère bien mon évènement lors du click approprié, mon JPopupMenu s'affiche mais pas correctement; Il ne disparait jamais et l'effet de "rollover" est absent. Pourtant les actions sont bien effectuées lorsque je clique dessus.

    L'un d'entre vous à t'il une idée ? Pour ma part je suis assez perdu.

    Je pensais que la cause venait du MouseEvent qui était produit par le JScrollPane et non pas la JTable mais après avoir convertit l'évènement avec SwingUtilities je constate que celà ne change rien.


    Merci de votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut Solution
    Citation Envoyé par Robert Heinlein
    Ne sous-estimez jamais le pouvoir de la stupidité humaine.
    Une simple faute stupide due à je ne sais quoi de ma pars :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ( e.isPopupTrigger() ) {
      popup.show(e.getComponent(), e.getX(), e.getY());
      //popup.setLocation(e.getLocationOnScreen());
      //popup.setVisible(true);
    }

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

Discussions similaires

  1. [Débutant] [JTable] affichage d'un vecteur
    Par neXistPa dans le forum Composants
    Réponses: 12
    Dernier message: 08/12/2005, 16h11
  2. [jTable] Gérer clik droit sur une jTable vide
    Par serwol dans le forum Composants
    Réponses: 4
    Dernier message: 01/12/2005, 10h06
  3. Réponses: 18
    Dernier message: 25/08/2005, 17h46
  4. [JTABLE] Affichage du nom de la colonne
    Par cameleon2002 dans le forum Composants
    Réponses: 3
    Dernier message: 01/07/2004, 11h08
  5. Non réception d'un evènement sur une JTable
    Par Kant dans le forum Composants
    Réponses: 4
    Dernier message: 28/05/2004, 10h38

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