2010-05-29 22 views
5

Agregué un listador cliqueado con el mouse a mi jtable, cuando hago doble clic en la fila, aparecerá una ventana en consecuencia.JTable listener problem

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(...) 
} 
}); 

Este código solía recuperar la fila de la fila seleccionada.

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; 
} 

En mi caso, me di cuenta cuando hice clic en la segunda fila de la primera vez, me sale nulo para selectedRow, sólo cuando selecciono primera fila y luego la segunda fila, puedo entonces obtener los datos correctos. Y si eliminé el detector de mouse, el problema se resolverá. ¿Es porque hago algo mal con el clic del oyente?

Respuesta

4

Si solo quiere saber en qué fila se hizo clic, entonces no necesita el oyente de selección. Simplemente use:

table.rowAtPoint(); 
+0

¿Cómo usarías esto? –

-1

Lo está haciendo de la manera incorrecta. Elimine su método actual getSelectedRow() por completo y nunca intente codificar algo similar. Aquí hay una versión mejor:

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 por ser innecesariamente grosero. – Pops