2010-05-29 4 views
5

Я добавил перечислитель мыши на мой jtable, когда я дважды щелкнул строку, вы откроется окно соответственно.Проблема с 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(...) 
} 
}); 

Этот код я использовал для извлечения строки, выбранной рядом.

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

В моем случае, я понял, когда я нажал на вторую строку в первый раз, я получаю нуль для selectedRow, только когда я выбираю первый ряд, то второй ряд, я тогда могу получить правильные данные. И если я удалил слушателя мыши, тогда проблема будет решена. Это потому, что я делаю что-то неправильно в прослушивателе кликов мыши?

ответ

4

Если вы просто хотите знать, какая строка была нажата, вам не нужен прослушиватель выбора. Просто используйте:

table.rowAtPoint(); 
+0

Как вы бы это применили? –

-1

Вы делаете это неправильно. Удалите текущий метод getSelectedRow() и никогда не пытайтесь скомпоновать что-то подобное. Вот лучшая версия:

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 за то, что он излишне груб. – Pops

Смежные вопросы