2010-05-29 6 views
5

J'ai ajouté un écouteur cliqué de la souris à mon jtable, lorsque je double-clique sur la ligne, une fenêtre apparaît en conséquence.Problème de l'écouteur JTable

jTable.addMouseListener(new java.awt.event.MouseAdapter() { 
public void mouseClicked(java.awt.event.MouseEvent e) { 
double amount = Double.parseDouble(jTable.getValueAt(getSelectedRow(), 4).toString()); 
String remarks = jTable.getValueAt(getSelectedRow(), 3).toString(); 
String transactionID = jTable.getValueAt(getSelectedRow(), 1).toString(); 
     new EditFrame(...) 
} 
}); 

Ce code m'a permis de récupérer la rangée sélectionnée.

public int getSelectedRow() { 
jTable.getSelectionModel().addListSelectionListener(
new ListSelectionListener() { 
public void valueChanged(ListSelectionEvent event) { 
    int viewRow = jTable.getSelectedRow(); 
    selectedRow = viewRow; 
    System.out.println(viewRow); 
} 
}); 
return selectedRow; 
} 

Dans mon cas, je réalise quand je clique la deuxième ligne de la première fois, je reçois nulle pour SelectedRow, que lorsque je sélectionne première ligne puis deuxième ligne, je peux alors obtenir les données correctes. Et si j'ai enlevé l'écouteur de souris le problème alors être résolu. Est-ce parce que je fais quelque chose de mal à l'écouteur de clic de souris?

Répondre

4

Si vous voulez juste savoir quelle ligne a été cliquée, vous n'avez pas besoin de l'écouteur de sélection. Il suffit d'utiliser:

table.rowAtPoint(); 
+0

Comment l'utilisez-vous? –

-1

Vous le faites dans le mauvais sens. Supprimez complètement votre méthode getSelectedRow() actuelle et n'essayez jamais de coder quelque chose de similaire. Voici une meilleure version:

jTable.addMouseListener(new java.awt.event.MouseAdapter() { 
public void mouseClicked(java.awt.event.MouseEvent e) { 
int selectedRow = jTable.getSelectedRow(); 
double amount = Double.parseDouble(jTable.getValueAt(selectedRow, 4).toString()); 
String remarks = jTable.getValueAt(selectedRow, 3).toString(); 
String transactionID = jTable.getValueAt(selectedRow, 1).toString(); 
     new EditFrame(...) 
} 
}); 
+4

-1 pour être inutilement impoli. – Pops