2010-04-22 17 views
3

J'ai ce code pour obtenir une ligne d'une JTable qui est généré par un DragEvent pour un DropTarget dans certains composants C qui peuvent ou peuvent ne pas être le JTable:Java/Swing: JTable.rowAtPoint ne fonctionne pas correctement pour les points en dehors de la table?

public int getRowFromDragEvent(DropTargetDragEvent event) { 
     Point p = event.getLocation(); 
     if (event.getSource() != this.table) 
     { 
      SwingUtilities.convertPointToScreen(p, 
       event.getDropTargetContext().getComponent()); 
      SwingUtilities.convertPointFromScreen(p, this.table); 
      if (!this.table.contains(p)) 
      { 
       System.out.println("outside table, would be row 
        "+this.table.rowAtPoint(p)); 
      } 
     } 
     return this.table.rowAtPoint(p);    
    } 

Le System.out.println est juste un hack en ce moment. Ce que je me demande, c'est pourquoi le System.out.println n'imprime pas toujours "row -1". Lorsque la table est vide, c'est le cas, mais si je fais glisser quelque chose sur la ligne d'en-tête de la table, j'obtiens le println avec "row 0". Cela semble être un bug ... ou je ne comprends pas comment fonctionne rowAtPoint()?

Répondre

1

Quelle version de Java avez-vous?

On dirait un bug pour moi: voir http://bugs.sun.com/view_bug.do?bug_id=6291631

Si tel est le cas pour vous, vous pouvez ajouter un contrôle supplémentaire:

if (!this.table.contains(p)) 
     { 
      if(p.y < 0) 
       System.out.println("clicked above table"); 
      else 
       System.out.println("outside table, would be row 
       "+this.table.rowAtPoint(p)); 
     } 
+0

6u16 JRE. Merci! –

+0

soupir. 5 ans plus tard et ils ne l'ont pas réparé. :-( –

+0

C'est probablement parce qu'il n'a pas encore reçu de votes ... – Fortega