Проблема слушателя JTable - PullRequest
5 голосов
/ 29 мая 2010

Я добавил список щелчков мыши в моем 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;
}

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

Ответы [ 2 ]

4 голосов
/ 29 мая 2010

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

table.rowAtPoint();
0 голосов
/ 29 мая 2010

Вы делаете это неправильно. Удалите ваш текущий метод 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(...)
}
});
...