2012-01-17 2 views
4

J'utilise Netbeans et j'ai conçu une fenêtre avec JTable et ajouté auditeur MouseEvent sur le composant JTable et ajouté ce code:Faites un clic droit sur le composant MouseListener tout JTable

private void productsTableMousePressed(java.awt.event.MouseEvent evt) { 
    if(evt.isPopupTrigger()) { 
     tablePopupMenu.setLocation(evt.getXOnScreen(), evt.getYOnScreen()); 
     tablePopupMenu.setVisible(true); 
     System.out.println("Fired!"); 
    } 
} 

private void productsTableMouseReleased(java.awt.event.MouseEvent evt) { 
    if(evt.isPopupTrigger()) { 
     tablePopupMenu.setLocation(evt.getXOnScreen(), evt.getYOnScreen()); 
     tablePopupMenu.setVisible(true); 
    } 
} 

Mais il ne fonctionne que quand je cliquez sur certaines cellules. Je veux le faire fonctionner sur toute la zone JTable. Comment?

Répondre

2

Si l'on suppose votre table est à l'intérieur d'un JScrollPane, il ne peut pas couvrir la totalité de la fenêtre. Pour vous assurer que la totalité de votre zone d'affichage est couverte, composez le setFillsViewportHeight(true) sur votre table.

+0

Oui, vous avez raison, c'était mon problème :) Je l'ai compris il y a quelques instants. Mais, merci pour cette méthode car je l'ai résolu en déclenchant mousePressed sur JScrollPane, mais vos solutions sonne mieux. –

+0

+1, bonne estimation. – camickr

+0

Peu de gens semblent savoir comment interagir correctement avec un JScrollPane. Je me bats encore plus que je ne le voudrais. – jackrabbit

3

Mais il ne fonctionne que lorsque je clique sur certaines cellules, mais je veux le faire fonctionner sur toute la zone JTable

Le MouseListener fonctionnera sur toutes les cellules. Je ne sais pas si vous devriez utiliser la méthode setLocation (...).

Voir Bringing Up a Popup Menu pour l'exemple de code.

Ou une meilleure approche consiste à utiliser:

table.setComponentPopupMenu(...); 
+1

+1 pour componentPopupMenu - c'est la façon _the_ de le faire :-) Le tutoriel est obsolète ... – kleopatra

0

J'ai trouvé que dans mon JTable (qui est dans un JScrollPane, imbriqué dans un JInternalFrame), il peut y avoir des problèmes de défilement et de redimensionnement lorsque le JTable était plus grand que le JScrollPane. Fondamentalement, si le cadre est sur mon moniteur gauche, mais j'ai fait défiler la table tout à fait vers la droite, la pop-up apparaît sur mon moniteur droit.

J'ai passé en revue les résultats de quatre options différentes: getMousePositions() pour le cadre et le volet de défilement, plus l'événement mouse getX et getXOnScreen().

Le seul qui m'a donné les résultats que je voulais était le getMousePositions() pour le cadre. Tout le reste a été compensé par sa propre vision interne du monde, ce qui a du sens pour moi.

Donc, je suppose que ce que je dis est de faire attention où vous obtenez les coordonnées de votre souris.

Questions connexes