2013-05-06 3 views
0

У меня есть таблица со строками, содержащая имена пациентов. Я хочу щелкнуть по имени в таблице, и различные атрибуты будут отображаться в поле ниже в зависимости от кликаемого пациента.Добавление слушателей в таблицу

Вот что я сделал до сих пор. Я не знаю, правильно ли сделано то, что я сделал. В классе GUI, где находится таблица, я добавил слушателей, как показано. Излишне говорить, что он не работает. Может кто-нибудь объяснить, что нужно сделать? Я смутился со всем этим.

//Adding listeners for the table data. 
void rowClickListener(MouseListener listenForMouseClickonRow) 
{ 
    table.addMouseListener(listenForMouseClickonRow); 
    //table.getModel().addTableModelListener(listenForMouseClickonRow); 
} 

Тогда в моем классе контроллера я добавил класс он заставил меня добавить все эти события, которые я даже не хочу:

public class rowClickListener implements MouseListener 
{ 
    @Override 
    public void mouseClicked(MouseEvent e) { 
     if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 1) 
     { 
      System.out.println("TEST mouse click"); 
     } 
    } 

    @Override 
    public void mouseExited(MouseEvent e) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void mousePressed(MouseEvent e) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void mouseReleased(MouseEvent e) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void mouseEntered(MouseEvent e) { 
     // TODO Auto-generated method stub 
    } 
} 
+1

Возможно, добавление «ListSelectionListener» в модель таблицы будет работать лучше, таким образом вы можете получить выбранный номер строки, а затем извлечь данные из любого места, где у вас есть. – Noe

+1

Да, ListSelectionListener - это путь. Таким образом, логика также будет работать, когда пользователь будет использовать клавиатуру. Приложения должны быть разработаны для работы с мышью или клавиатурой. Продвинутые пользователи используют клавиатуру, новички используют мышь. – camickr

ответ

3
yourtable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { 
     @Override 
     public void valueChanged(ListSelectionEvent e) { 
      //your handle 
     } 
    } 

Я думаю, что будет работать намного лучше. С помощью ListSelectionEvent вы можете получить выбранную строку.

Кроме того, если необходимо выбрать только одну запись за раз, не забудьте установить режим выбора таблицы в SINGLE_SELECTION.

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