2013-05-06 41 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 2013-05-06 19:31:48

+1

是的,ListSelectionListener是要走的路。这样,当用户使用键盘时,逻辑也将工作。应用程序应设计为使用鼠标或键盘。高级用户使用键盘,新​​手使用鼠标。 – camickr 2013-05-06 19:33:30

回答

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

我认为,将工作方式更好。用ListSelectionEvent你可以得到选定的行。

此外,如果一次只能选择一条记录,请不要忘记将表的选择模式设置为SINGLE_SELECTION